我制作了这个计算器
#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;
}
如果您输入无效的内容,它应该继续询问相同的问题并终止。
如果您在第一次终止时输入无效内容。但是,如果您输入有效的操作,并且第二次输入无效字符,它将继续输出在无效字符之前处理的相同问题+答案。
答案 0 :(得分:3)
默认情况下,当流无法读取内容时,它将设置其内部failbit,并且将保留无法解析的输入。因此,当您向代码提供输入"x = 2"
然后尝试将x作为整数读取时,读取失败并且x保持不变。之后发生的任何事情都可能是错误的,并且在许多不同方面都会出错取决于输入。
要防止这种情况,请检查输入是否成功:
cin >> a >> operation >> b;
if (!cin) {
cout << "Wrong input format. Program terminated.\n";
return -1;
}
在您的特定情况下,您获得的特定行为是因为您没有在循环的每次迭代中重新初始化您的变量。如果你这样做,你的应用程序会以某种不同的方式失败,但是,最好的方法是实际检查输入是否是预期的格式。
答案 1 :(得分:0)
这是因为“操作”var超出了“while”范围,即最后一个值被验证,并且交换机上的默认主体永远不会被验证
答案 2 :(得分:0)
只需添加一行
operation=0;
在while(1)
将在提供无效答案后终止作业时
。
然而,这并不能解释为什么没有它,程序会跳过要求操作并在提供无效答案时继续输出先前的结果。