c++计算器不断循环

c++ calculator keeps looping

本文关键字:循环 计算器 c++      更新时间:2023-10-16

我做了这个计算器

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

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

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

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

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

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

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

这是因为"operation" var超出了"while"范围,即最后一个值被验证,而交换机上的默认主体从未被验证

添加一行

operation=0;
while(1)后面的

将在提供无效答案时终止。

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