cin 不在 Do..While 循环中工作,程序在启动后直接崩溃

问题描述 投票:0回答:1

我是一个 C++ 初学者,我陷入了自我训练。

我想做一个猜数字游戏 - 基本上是相当简单的任务。

问题出现在

do..while
循环中。我想从用户那里读入一个数字,直到猜出正确的数字为止。当我启动程序时,它崩溃了,因为它总是循环
cout
cin
但它应该在
cin
处等待,直到有输入。为什么会出现这种情况?如果我只需尝试一次就可以执行一个程序,则程序会等待,直到有输入。

所以,我的想法是做一个

do..while
循环,因为我至少想经历一次。

我希望得到一些意见,以便我可以对这个问题进行更多研究。

在我的训练中,我做了:

  • 变量、常量、数据类型和操作
  • 逻辑运算符和比较运算符
  • 控制结构和循环
  • 功能
#include <iostream>

using namespace std;

int main()

{
    int eingabe = 0;
    int randomZahl = 8;
    bool checker = true;

    cout << "Number Guesser\n\n";

    do
    {
        if(eingabe != randomZahl)
        {
            cout << "Bitte gib eine Zahl ein: ";
            cin >> eingabe;
        }

        if(eingabe == randomZahl)
        {
        checker = false;
        }


    }while(checker);

    return 0;

}

这就是崩溃的样子:

c++ loops iostream cin
1个回答
0
投票

您没有检查以确保用户输入有效的整数。

如果他们没有输入有效的整数,

operator>>
会将
cin
置于您未清除的错误状态。这将导致
operator>>
停止等待后续输入,导致循环永远运行。

试试这个(如果德语错了,请原谅我,我使用谷歌翻译):

#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int eingabe, randomZahl = 8;

    cout << "Number Guesser\n\n";

    do
    {
        cout << "Bitte gib eine Zahl ein: ";
        if (cin >> eingabe)
        {
            if (eingabe == randomZahl)
            {
                cout << "Du hast richtig geraten!\n";
                break;
            }

            cout << "Du hast falsch geraten! Versuchen Sie es erneut.\n";
        }
        else
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');

            cout << "Sie haben falsche Daten eingegeben! Versuchen Sie es erneut.\n";
        }
    }
    while (true);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.