下面做我们的计算器最终版。
当前还存在的问题是用户只能算一次。如果有人买一个一次性计算器,那么他肯定是个土豪。我们的计算器不能只给土豪用,所以要改成可以反复使用的。
使用循环语句就可以了,但是循环哪些代码呢?从用户输入到打印出结果这个过程要反复执行,代码如是:
enum OPT{
jia = 1,
jian,
cheng,
chu
};
int main(void)
{
//保存用户输入的数
int number1;
int number2;
int opt;//运算符
//循环从输入到输出结果的过程
while(1){
//提示用户输入第一个数,需循环直到用户输入正确的数:
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;
}
能完成这个程序,就掌握了最基本的入门知识。总结起来,应掌握以下概念:函数,变量,头文件,入口函数,参数,返回,while循环,if判断,switch case,宏,枚举,结构,声明,定义。
要想下一步顺利学习,需要将基本语法搞熟练,尤其是能快速区分定义与声明,调用函数与访问变量。要点如下:
- 函数定义语法四要素:返回值类型、函数名、参数、函数体,如
int add(int a,int b){ return a+b;}
- 函数调用语法两要素:函数名、参数,再加一个可选的:返回值。如
int r = add(2,4);
- 函数调用不能写在函数外面。
- 变量定义语法两要素:类型、变量名、再加一个可选的:初始值。如:
int r;
- 函数声明与定义的区别是有无大括号。
- 区分是调用函数还是使用变量的关键:有无小括号。如:
int a=abc;
abc肯定是一个变量;int a=abc();
abc肯定是一个函数。 - 变量声明与定义的区别是有无extern,有extern时就是声明,声明时不能初始化。比如:
extern int a;
就是声明,而int a;
就是定义。上一篇:成为C++高手之while循环
时间: 2024-10-17 20:33:18