【发布时间】:2020-04-03 20:56:00
【问题描述】:
我做了一个用户需要猜数字的游戏,
号码是用rand函数生成的。
如果用户输入了无效的数字或字符,打印错误信息。
我的问题是cin.fail()对我来说效果不佳,例如,当我输入一个字符作为输入时,我的程序总是打印“太低!”,可能是因为它计算了字符的值(@ 987654321@).
有什么建议吗?
我的代码:
void Game()
{
srand(time(0));
int iGuess;
const unsigned int iNum = (rand() % 1000 + 1);
Start:
system("cls");
cout << "\n Guess the Num: "; cin >> iGuess;
if (iGuess == iNum) {
system("color A");
cout << "\n\n Good Job! You Won!";
exit(0);
}
if (iGuess > iNum) {
cout << "\n\n Too High!";
Sleep(3000);
goto Start;
}
if (iGuess < iNum) {
cout << "\n\n Too Low!";
Sleep(3000);
goto Start;
}
if (cin.fail()) {
cout << "Input has failed! & Error Code: " << GetLastError();
Sleep(3000);
goto Start;
}
}
【问题讨论】:
-
尝试使用该输入检查用户输入是否在之前失败。编辑:您还需要在用户重试之前清除错误状态:How to clear cin Buffer in c++
-
您可以将用户输入作为字符串,然后使用
std::strtol()将其转换为数字。您可以检查第二个参数中的返回值,以查看是否存在转换错误(即字符串是否不是有效数字)。 -
检查
cin.fail()应该是输入后的第一个。如果输入失败,iGuess中的值将无用。 -
而且,如果输入失败,您必须重置它并消耗垃圾。你可以看看这个:SO: C++ Beginner Infinite Loop When Input Wrong Data Type and Help Evaluate My Code - 它是一个
float值,但原理是相似的。 -
我想知道还没有人提到
goto Start;的可怕用法... ;-)
标签: c++