【问题标题】:c++ calculator keeps loopingc++计算器不断循环
【发布时间】:2015-12-02 01:24:34
【问题描述】:

我做了这个计算器

#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 + 2)>>1 + 2 = 3 输入您要执行的计算(例如:1 + 2)> >x = 2 输入您要执行的计算(例如:1 + 2) >>= 2 输入您要执行的计算(例如:1 + 2) >>= 2 输入您要执行的计算(例如: 1 + 2) >>= 2 等等..
  • 学习使用调试器是一件很棒的事情。
  • @Roemerdt 使用调试器单步执行代码时,您观察到了什么?
  • 可能是因为你没有重置a、b、结果和操作。

标签: c++ loops calculator


【解决方案1】:

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

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

    cin >> a >> operation >> b;

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

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

【讨论】:

    【解决方案2】:

    这是因为“操作”变量超出了“while”范围,即验证了最后一个值,而交换机上的默认主体从未验证过

    【讨论】:

    • 只是一堆英文单词一个接一个......没有任何连贯性。有人可以破译这个吗?
    • 抱歉,这不是我的母语
    • @KarolyHorvath 我的意思是操作变量超出了 while 循环的范围,因此将开关的验证与该变量中最后保存的值进行比较
    • @KarolyHorvath ,操作超出了while循环的范围
    • @KarolyHorvath ,好吧,不管你说什么,为了和你相处,操作 var 对 while 循环来说是全局级别的,这或多或少是我所说的
    【解决方案3】:

    只需添加一行

    operation=0;
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 2022-10-24
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多