2015-09-06 133 views
1

我做了这个计算器C++计算器不断循环

#include <iostream> 

using namespace std; 

int main() 
{ 
    float a, b, result; 
    char operation; 

    while (1) { 

     cout << "Enter the calculation you want to perform (e.g: 1 + 2)\n>>"; 
     cin >> a >> operation >> b; 

     switch(operation) 
     { 
      case '+': 
       result = a + b; 
       break; 

      case '-': 
       result = a - b; 
       break; 

      case '*': 
       result = a * b; 
       break; 

      case '/': 
       result = a/b; 
       break; 

      default: 
       cout << "\nInvalid operation. Program terminated." << endl; 
       return -1; 
     } 

     cout << "= " << result << "\n" << endl; 
    } 

    return 0; 
} 

它应该一直在问同样的问题,如果你输入一些无效的终止。

如果在第一次终止时输入了无效的内容。但是如果你输入一个有效的操作,并且第二次输入一个无效的字符,它会一直输出相同的问题+它在无效字符前处理的答案。

+1

举个例子。你输入了什么? –

+0

这就是它的作用:输入您想要执行的计算(例如:1 + 2) >> 1 + 2 = 3 输入您要执行的计算(例如:1 + 2)012xx>> x = 2 输入要执行的计算(例如:1 + 2)>> = 2 输入要执行(例如:1 + 2)的计算 >> = 2 输入要计算你想要执行(例如:1 + 2) >> = 2等。 – Roemerdt

+1

学习使用调试器是一件好事。 – mathematician1975

回答

3

默认情况下,当流不能读的东西,它将设置其内部故障位,并且它将离开它无法解析的输入。因此,当您向代码提供输入"x = 2",然后尝试将x读取为整数时,读取失败,并且x仍然保留。随后发生的任何事情可能都是错误的,并且根据输入的不同,它会以多种不同方式出错。

为了防御的是,检查输入是否成功:

cin >> a >> operation >> b; 

    if (!cin) { 
     cout << "Wrong input format. Program terminated.\n"; 
     return -1; 
    } 

你的具体情况,你居然也得到了具体的行为是因为你没有在循环的每次迭代重新初始化的变量。如果你这样做了,你的应用程序会以某种不同的方式失败,但最好的办法是实际检查输入是否处于预期的格式。

0

这是由于“操作”变种是出“而”范围,即最后的值进行验证,交换机上的默认身体从未证实

+1

只是一堆英文单词一个接一个......没有任何连贯性。有人可以放弃这个吗? –

+0

对不起,这不是我的第一语言 –

+0

@KarolyHorvath我的意思是说,操作变量超出了while循环的范围,所以开关的验证与上次保存的变量 –

0

只需添加一行

operation=0; 

while(1)之后会做的是提供一个无效的答复时结束的工作。

但是,这并不能解释为什么没有它,程序跳过要求操作并在提供无效答案时继续输出以前的结果。