成为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循环

时间: 2024-10-17 20:33:18

成为C++高手之最终版计算器的相关文章

结对项目--四则运算图形化最终版

四则运算器图形化最终版 (然而被我做成了奇怪的东西 组员:13070030张博文 13070033刘云峰 一.概念阶段 最初是想试试用android做个计算器app,无奈从零学起着实太赶,而且这个计划在试用了无比卡顿占内存的android studio后就彻底搁浅了. 然后就被路人谣传说MFC好用,无奈从零学起着实太赶,而且这个计划在无人指导的摸黑下也顺手搁浅了. 最终便沦为了EasyX旧传统,好歹有点基础,但果然还是不太甘心. 以及因为当初想做app,所以抠了iphone计算器的图想当UI,结

jQuery 3.0最终版发布,十大新特性眼前一亮

jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将介绍一些令人眼前一亮的jQuery 3.0全新特性. 开始前的说明 如果你想要下载jQuery 3.0进行亲自实验,可以通过该页面进行下载.另

最终版的Web(Python实现)

天啦,要考试了,要期末考试了,今天把最终版的Python搭建Web代码先写这里记下了.详细的过程先不写了. 这次是在前面的基础上重写 HTTPServer 与 BaseHTTPRequestHandler,主要利用 python 提供 的 socket 进行编程,从而实现消息的接收与相应:然后再接着引入多线程,分别处理来自客户端的请求:最后实现根据客户端传递的参数动态生成页面的功能. 主要步骤如下: 一. .重写 HTTPServer 与 BaseHTTPRequestHandlerPython

理解《JavaScript设计模式与开发应用》发布-订阅模式的最终版代码

最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线空间功能和命名空间功能,以达到先发布再订阅的功能和防止名称冲突的效果.但是令人感到遗憾的是最终代码并没有给出足够的注释.这让像我一样的小白就感到非常的困惑,于是我将这份最终代码仔细研究了一下,并给出了自己的一些理解,鉴于能力有限,文中观点可能并不完全正确,望看到的大大们不吝赐教,谢谢! 下面是添加了个人注释的

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答

python操作word(改课文格式)【最终版】

python操作word的一些方法,前面写了一些感悟,有点跑题,改了下题目,方便能搜索到.心急的可以直接拉到最后看代码,我都加了比较详细的注释. 从8.3号早上9点,到8.8号下午5点半下班,终于把这个python代码写出来了,这五天简直是废寝忘食(扯淡),每天查资料到半夜2点(其实是天太热,洗完澡又晾干就要一个多小时了,在这里吐槽下今年的夏天,2016年北京的7月份简直了,平生第一次长痱子,连去年都没用过的凉席都翻出来了). 好吧,扯得有点远了.因为工作需要,要批量修改一批rtf文件里的文字格

25岁,我习得了自愈近视的魔法-最终版(填坑版)

转自:http://blog.sina.com.cn/s/blog_624791ed0100ftp9.html#comment4 距离上次发帖差不多有2个月了,之前的帖子差了很多东西,很糙,特别是没和所发资料有所关联.而且那段时间我比较忙.压力也比较大,没时间去整理自己的想法.而且所发书上所述不是完全正确的,特别是台湾和日本的那两本,没什么理论根据.近几天我把这些书又翻了一遍,决定按照毕业论文的格式再写一遍,也算是对上次不怎么负责任的发帖的补偿吧.感谢S1er的支持,不废话了. 简述 简述一下整

GTK简单版计算器

接下来我们做一个简单版的计算器. 1)获取按钮上的内容. 2)如果获取的内容是" c ",则代表进行退格操作,相当于删去最后一个字符. 3)如果获取的内容不是" c ",则把每一次获取的内容连接起来,如: 第一次按了 " 1 ", 第二次按了 " + ", 第三次按了 " 1 ", 连起来则变为 "1+1". 4)如果获取的内容是" = ",则需要相应的运算.先把连起

Sunny-Code 最终版总结会议

设想和目标 我们的软件要解决什么问题?是否定义得很清楚? 我们打算做一款集成小蝴蝶功能.Ip快速修改功能.WiFi共享功能的一款软件.目的是为了解决晚上小蝴蝶断线重连问题.还有新生不会修改IP问题. 功能定义清楚. 团队在计划阶段是如何解决同事们对于计划的不同意见的? 我们共同提出问题,然后大家集体商量可行性,最后投票解决. 如果历史重来一遍, 我们会做什么改进?   应该时刻保持商量,协同进度,及时沟通,才可以保证最后不出现功能难以合到一个界面的情况. 计划 你原计划的工作是否最后都做完了?