而Do / While循环意外中断

时间:2015-07-05 02:33:55

标签: c++ while-loop do-while

此程序旨在无限循环....所以如果有人输入5,它会要求另一个数字(5或9),如果他/她输入9,它会要求5或9 ...无限广告

using namespace std;

int main()
{
    cout << "Hello world! Enter a number" << endl;
    int x;
    cin >> x;

    while (x == 5)
    {
        std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        cout << "Try again, you got 5" << endl;
        cin >> x;

    }

    while (x == 9)
    {
        cout << "You got 9, try again mate" << endl;
        std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        cin >> x;
    }
return 0;
}

但我不明白当我切换数字(如“5”到“9”再回到“5”)时程序就会停止。

我认为这是因为在循环#1和循环#2完成执行后,程序永远不会返回任何一个并直接继续“返回0”,但我不知道如何使程序返回到两个循环。

PS:我已经尝试切换到do-while循环并从括号中取出“cin”语句,但它们没有解决问题。

3 个答案:

答案 0 :(得分:1)

正如@Billy在评论中所说,你的逻辑存在缺陷。首先,如果你想要一个无限的循环,只要某个数字等于5或9就不要循环。然后,在循环中,只需检查它的编号是什么正确的输出。

#include<iostream>
using namespace std;

int main()
{
    int x;

    cout << "Hello world! Enter a number" << endl;

    while(1)
    {
        cin >> x;
        std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        if(x == 5) cout << "Try again, you got 5" << endl;
        if(x == 0) cout << "You got 9, try again mate" << endl;
    }

    return 0;
}

答案 1 :(得分:1)

您的代码未提供所需的行为,因为当第二个while循环结束时,您不会重复该过程并且程序结束。

那么您想要的是循环直到用户输入除59之外的其他数字。
为了做到这一点,我们使用while循环运行到无穷大,如果用户使用break来逃避无限循环输入与59不同的数字。

您可以像这样修改代码:

using namespace std;

int main()
{
    cout << "Hello world! Enter a number" << endl;
    int x;

    while(1){
        cin >> x;
        std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        if(x == 5)
            cout << "Try again, you got 5" << endl;
        else if(x == 9)
            cout << "You got 9, try again mate" << endl;
        else
            break;        
    }

    return 0;
}

答案 2 :(得分:0)

删除此行:std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
有了它,你就不会阅读输入。

在您的示例中,没有无限循环。我建议为每个值调用一个函数:

inline void five(int &x)
{
    std::cout << "Try again, you got 5" << std::endl;
    std::cin >> x;
}

inline void nine(int &x)
{
    std::cout << "You got 9, try again mate" << std::endl;
    std::cin >> x;
}

inline void other(int &x)
{
    std::cout << "Try again: ";
    std::cin >> x;
}

int main()
{
    std::cout << "Hello world! Enter a number" << std::endl;
    int x{};
    std::cin >> x;
    bool running{true};

    while (running) {
        if (x == 5) five(x);
        else if (x == 9) nine(x);
        else other(x);
    }
}