NO.3 函数调用之简单计算器程序

来源:互联网 发布:js alert 变量 编辑:程序博客网 时间:2024/04/28 23:02

代码:

/*   *Copyright (c) 2015  深圳大学信工电子 *ALL right reserved   *文件名;简单计算器.cpp   *作者;笨鸟 *完成日期2015年11月19日   *问题描述:函数调用之简单计算器 *输入描述:键盘键入运算字符和数据直至输入的字运算符为#为止  *程序输出:输出计算结果  */  #include <iostream>#include <stdio.h>using namespace std;double add(double,double);double minu(double,double);double multi(double,double);double div(double,double);double Calcuate(double,double,char);int main () {     char a; double b,c,n; do { cout<<"请输入字符:"<<endl; cin.get(a); if(a=='#') break;         cout<<"请输入数据:"<<endl; cin>>b>>c;      n=Calcuate(b,c,a); cout<<"运算结果为:"<<n<<endl; fflush(stdin);  //缺少则将导致程序运行过程出现错误 文末有图
 }  while(a!='#'); return 0;}double add(double b,double c) {double n;n=b+c;return n;}double minu(double b,double c) {double n;n=b-c;return n;}double multi(double b,double c) {double n;n=b*c;return n;}double div(double b,double c)  {double n;n=b/c;return n;}double Calcuate(double b,double c,char a) {double n; switch (a) {    case '+':  n=add(b,c);  break;case '-':  n=minu(b,c);  break;case '*':  n=multi(b,c); break;case '/':  n=div(b,c);   break;}   return n ;}

运行结果:




如缺少 fflush(stdin),将在运行过程中出现两处奇怪的错误:

错误一:字符的输入将被跳过,直接要求输入数据


输入字符为#后出现第二次错误:直接输出奇怪的运算结果,而且循环反复


错误分析:

这个程序首先提示用户输入一个字符,然后等待用户输入,如果用户输入的是字符,
程序会读取刚才输入的字符,然后提示用户输入一个整数,等待用户 输入。
第一次错误是因为第一次输入的字符会遗留在“输入缓冲区”中,缓冲中有数据,故而 cin.get 函数不会等待用户输入,直接就去缓冲中读取,而且读取的字符为随机值,然后要求输入数据,
而第二次错误,由于程序要求输入数据,用户却输入字符,这个字符被遗留在存放数据的缓冲中,而cout只能读入数据,如此反复,从而导致不停地输出“奇怪的运算结果。



0 0
原创粉丝点击