如何阻止这种无限重复,但仍保持循环?

时间:2015-07-07 15:09:22

标签: c++ loops while-loop

在第33行,有一个中断来阻止代码无限期重复,但我希望它能参与input

守则:

while loop

如果你们能帮助我找到为什么会重复,那真的会有所帮助。

2 个答案:

答案 0 :(得分:1)

您需要在for循环后添加break语句才能退出循环。没有break for循环将执行并打印输出,然后控制将落到while循环的末尾,它将在循环的顶部开始。

我还建议您将if (cin.fail())更改为仅else,因为您已经在检查if (!cin.fail())。如果要再次循环,还需要忽略输入的其余部分并清除错误标志。

你在while循环中还有一组额外的括号。通过这些更改,您的代码将是:

#include <iostream>
#include <limits>
using namespace std;
int main()
{
    while (true)
    {
        cout << "This program counts by twos to any number that is inputted by the user." << endl;
        cout << "Input an even number to start counting." << endl;
        int input;
        cin >> input;
        if (!cin.fail())//fails if input is not an integer
        {
            if (input < 0)//makes sure all numbers are positive
            {
                cout << "That is not a positive number. Try again?" << endl;
            }
            else if (input % 2 != 0) // makes sure all numbers are even
            {
                cout << "That is not an even number. Try again?" << endl;
            }
            else{
                for (int i = 0; i <= input; i += 2) //uses a for loop to actually do the counting once you know that the number is even.
                {
                    cout << i << endl;

                }
                break;  // exit the while loop
            }

        }
        else //else when you input anything other than an integer. 
        {
            cout << "That is not a digit, try again." << endl;
            cin.clear();  // reset the error flags
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // clear any extra input
        }
    }
    return 0;
}

答案 1 :(得分:0)

根据您打印的错误消息,我猜您的问题是您希望让用户有机会再次尝试输入数字,但在一次失败后,无论您输入什么,它都会一直失败。如果是这种情况,请将break替换为cin.clear()。这将告诉流您已从错误中恢复并准备好接收更多输入。

但是,如果您要这样做,您的程序现在没有退出条件,因此您需要在for循环之后添加break(或return 0)。