成为C++高手之最终版计算器

下面做我们的计算器最终版。

当前还存在的问题是用户只能算一次。如果有人买一个一次性计算器,那么他肯定是个土豪。我们的计算器不能只给土豪用,所以要改成可以反复使用的。

使用循环语句就可以了,但是循环哪些代码呢?从用户输入到打印出结果这个过程要反复执行,代码如是:

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循环
下一篇:成为C++高手之指针与数组

猜你喜欢

转载自blog.csdn.net/nkmnkm/article/details/51404222