成为C++高手之while循环
程序员文章站
2022-05-06 10:34:10
我们的计算器还有好多问题,我们一个个解决。
本节解决用户输错就退出的问题。我们应该在用户输错时,提示并让其重新输入,如果一直错就一直提示,直到输对。用while循环语句做比较合适,如下:...
我们的计算器还有好多问题,我们一个个解决。
本节解决用户输错就退出的问题。我们应该在用户输错时,提示并让其重新输入,如果一直错就一直提示,直到输对。用while循环语句做比较合适,如下:
//提示用户输入第一个数,需循环直到用户输入正确的数: int r; while(1){ printf("请输入第一个数:\n"); r = scanf("%d",&number1); //查看scanf是否收到了正确的数 if(r==0){ printf("别调皮,这样不好玩,我走了\n"); //清空输入流。如果没有这一句,输入流中残存的字符将导致scanf不等待用户输入。 int c; while ( (c = getchar()) != '\n' && c != eof ) ; }else{ //输对了,跳出循环 break; } }
这段代码会造成用户输错时,一直循环,重新让用户输入,直到输对才停止循环。
每次执行完循环体(就是大括号内的代码),都会回到while(1),重新检查条件,如果条件为真就再次进入循环体执行。while(1)这行,小括号里跟if语句一样,是条件,如果是真就执行大括号里的代码。这里永远是1,1就是是真,所以永远执行大扩号里的代码,也就是永远执行循环体。直到用户输对了,执行break时,才跳出了循环。注意是从break处直接跳出循环,break后面的代码不再执行。
while ( (c = getchar()) != ‘\n’ && c != eof ) ; 这一句是为了清空输入流,如果用户输入的不是数字,那么其实scanf没有从输入流中将字取出,导致下一次再用scanf取时,直接返回0而不是等待用户输入。这种写法是跨平台通用的,用fflush(stdin)清空的话只能在windows下使用。
添加对第二个数和运算符的处理后,main函数是这样的:
int main(void) { //保存用户输入的数 int number1; int number2; int opt;//运算符 //提示用户输入第一个数,需循环直到用户输入正确的数: int r; while(1){ printf("请输入第一个数:\n"); r = scanf("%d",&number1); //查看scanf是否收到了正确的数 if(r==0){ printf("别调皮,这样不好玩,重来\n"); //清空输入流。如果没有这一句,输入流中残存的字符将导致scanf不等待用户输入。 int c; while ( (c = getchar()) != '\n' && c != eof ) ; }else{ //输对了,跳出循环 break; } } //提示用户输入第二个数 while(1){ printf("请输入第二个数:\n"); r = scanf("%d",&number2); //查看scanf是否收到了正确的数 if(r==0){ printf("别调皮,这样不好玩,重来\n"); //清空输入流。如果没有这一句,输入流中残存的字符将导致scanf不等待用户输入。 int c; while ( (c = getchar()) != '\n' && c != eof ) ; }else{ //输对了,跳出循环 break; } } int result;//存放计算结果 //提示用户输入运算符 while(1){ printf("请输入运算符(%d%d%d%d分别对应加减乘除):\n",jia,jian,cheng,chu); r = scanf("%d",&opt); if(r==0){ printf("运算符也是数字,别搞错好吗?你这样让我怎么混? 重新输入吧\n"); //清空输入流。如果没有这一句,输入流中残存的字符将导致scanf不等待用户输入。 int c; while ( (c = getchar()) != '\n' && c != eof ) ; //回到循环开始 continue; } //跟据运算符进行不同的运算 switch(opt){ case jia: //加 result = number1+number2; break; case jian: //减 result = number1-number2; break; case cheng: //乘 result = number1*number2; break; case chu: //除,现在只能整除 result = number1/number2; break; default: printf("运算符必须是1,2,3,4之一才行!重来\n"); continue; //回到循环开始,重新来一遍 } //当执行到这里时,说明运算符检查成功,应跳出while。 break; } //输出结果 printf("result : %d\n",number1,number2,result); return 0; }
可以看到一个新东西:continue ,其作用是跳回到循环的开始,也就是while(1)这一行。重新判断条件语句,如果为真就重入执行循环体。
上一篇: .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
下一篇: 爆笑:神人邱处机