gpt4 book ai didi

c++ - cin 对于一个 int 输入一个 char 会导致应该检查输入的循环变得疯狂

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:32 25 4
gpt4 key购买 nike

这是我的游戏的一个功能,它会要求输入并输入“iAuswahl”!然后 while 循环检查它是否是我想要的值之一 1-9 如果不是它激活并且应该要求新的输入。它为 int 做的女巫。但是,如果我输入一个像 r 这样的字符,它会变得疯狂,并且只是不断地把我的 cout 还给我并跳过 cin!我的问题是它为什么这样做以及我该如何阻止它?

void zug(string sSpieler, int iDran){
int iAuswahl;
char cXO = 'O';

if (iDran == 1)
{
cXO = 'X';
}

cout << sSpieler << ", Sie sind am Zug. Bitte waehlen sie eins der Felder.\n" << endl;
grafik();
cout << "Sie sind >> " << cXO << " <<." << endl;
cin >> iAuswahl;
cout << endl;

while (
iAuswahl != 1
&& iAuswahl != 2
&& iAuswahl != 3
&& iAuswahl != 4
&& iAuswahl != 5
&& iAuswahl != 6
&& iAuswahl != 7
&& iAuswahl != 8
&& iAuswahl != 9
)
{
cout << "Kein gültiges Feld bitte wählen sie noch einmal!\n" << endl;
cin >> iAuswahl;
}
feldfuellen(iAuswahl, cXO);
}

最佳答案

如果从流中读取时发生错误,则会设置一个错误标志,并且在您清除错误标志之前无法再进行读取。这就是为什么会出现无限循环的原因。

cin.clear(); // clears the error flags
// this line discards all the input waiting in the stream
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

另外,如果一开始不知道读取是否成功,就使用输入操作的结果是错误的。您不能对 iAuswahl 的值做出假设。这是使用流的新手最常犯的错误之一。经常检查输入操作是否正常。这通过在 bool 上下文中使用 operator>> 最容易完成:

if (cin >> some_obj) {
// evaluates to true if it succeeded
} else {
// something went wrong
}

还有,天哪,这条线

while (iAuswahl != 1 && iAuswahl != 2 && iAuswahl != 3 && iAuswahl != 4 && iAuswahl != 5 && iAuswahl != 6 && iAuswahl != 7 && iAuswahl != 8 && iAuswahl != 9)

可以是这样的:

while (iAuswahl < 1 || iAuswahl > 9)

一个正确的循环看起来像这样:

while (true)
{
if ((cin >> iAuswahl) && (iAuswahl >= 1) && (iAuswahl <= 9)) break;
std::cout << "error, try again\n";
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

关于c++ - cin 对于一个 int 输入一个 char 会导致应该检查输入的循环变得疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18400620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com