C ++程序故障?

时间:2015-08-08 18:17:48

标签: c++

我需要帮助调试我的代码。所以我创建了一个添加和减去数字的程序,但是当我实现一个do-while循环来重放程序时,实际程序关闭并且不执行do-while循环并且不重放程序。我的代码有问题吗?

P.S。我也在使用codeblocks IDE

#include <iostream>
using namespace std;
int main()
{
    // Addition and Subtraction Calculator

    int a_number, number1, number2, sum, number3, number4, subsum, again;
    // subsum = subtracted sum
    // number1 and number2 are variables that hold the users input for addition 
    // number3 and number4 are variables that hold the users input for     subtraction                

    do
    {
        cout << "Addition & Subtraction Calculator" << endl;
        cout << "-------------------------------------------" << endl;

        cout << "1. Addition" << endl;
        cout << "2. Subtraction" << endl;
        cout << "Please enter a number [1 or 2]" << endl;
        cin >> a_number;

        while (a_number < 1 || a_number > 2)
        {
            cout << "Please enter either 1 or 2" << endl;
            cin >> a_number;
        }

        switch (a_number)
        {
        case 1:
            cout << "Please enter a number" << endl;
            cin >> number1;
            cout << "Please enter another number" << endl;
            cin >> number2;
            sum = (number1 + number2);
            cout << "The sum is " << sum << endl;
            break;

        case 2:
            cout << "Please enter a number" << endl;
            cin >> number3;
            cout << "Please enter another number" << endl;
            cin >> number4;
            subsum = (number3 - number4);
            cout << "The answer to the subtraction problem is: " << subsum << endl;
            break;
        }

        cout << "Do you want to try again? [y/n]" << endl;
        cin >> again;
    }
    while (again == 'y' || again == 'n');


    return 0;
}

3 个答案:

答案 0 :(得分:1)

行。因此OP使用int,他们应该使用char。这涵盖了当前的问题。 int again应为char again

但其他答案错过了重要的一点。

int again;
cin >> again;

用户输入将根据again的要求转换为整数。输入y或n无法转换为整数,因为y和n都不是数字且无法转换。 again保持不变,保持发生的任何垃圾值都位于内存中的那个位置,可能实际上是ay或n ,但更重要的是cin现在出错了在继续之前需要清除的状态。

如果已经过测试,

cin会通知OP。所以让我们测试一下。

int again;
if (cin >> again)
{
     // got good input. Do something with it.
}
else
{
     // got bad input. 
     cin.clear();
     // that bad input is still in the buffer and needs to be removed
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
     // the above line will wipe out everything to the end of the stream or 
     // end of line, whichever comes first. 
}

为什么这很重要:因为OP正在使用cin进行大量数字输入,并且没有检查其是否有效。例如:

cout << "Please enter a number [1 or 2]" << endl;
cin >> a_number;

程序完全被破坏,如果用户键入除数字之外的任何内容,则无法在没有终止信号的情况下退出。

始终检查错误状态并返回代码。他们随时为您提供帮助。在使用之前始终验证用户输入。用户是邪恶的,将试图打破你的程序。不要让他们。

答案 1 :(得分:0)

使用char again;代替int again;

您的代码again中的

int,而(again == 'y' || again == 'n')中的againint}与char进行比较,没有意义

答案 2 :(得分:0)

您需要将again变量更改为char数据类型,因为您需要存储文本。像这样:

char again;

您还需要将while语句更改为:

while(again != "n");

或者

while(again == "y");