c ++计算器不断循环

c++ calculator keeps looping

我做了这个计算器

#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;
}

它应该会一直问同样的问题,如果你输入了无效的东西就会终止。

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

那是因为 "operation" var 不在 "while" 范围内,即最后一个值被验证而开关上的默认主体从未被验证

默认情况下,当流无法读取某些内容时,它会将其内部故障位设置为打开状态,并保持其无法解析的输入不变。因此,当您向代码提供输入 "x = 2" 然后尝试将 x 读取为整数时,读取失败并且 x 保留在其中。之后发生的任何事情都可能是错误的,并且在许多不同的方面都是错误的取决于输入。

为了防止这种情况,请检查输入是否成功:

    cin >> a >> operation >> b;

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

在你的特定情况下,你得到的特定行为是因为你没有在循环的每次迭代中重新初始化你的变量。如果这样做,您的应用程序将以某种不同的方式失败,但尽管如此,最好的解决方法是实际检查输入是否为预期格式。

只需添加行

operation=0;

while(1) 之后将在提供无效答案时完成终止工作。

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