C++ 当用户输入除和整数之外的任何东西时,为什么我的程序无限循环输出?C++;
因此,用户应该能够输入一个介于1-15之间的数字来移动2d游戏板上的磁贴。如果用户输入任何不在范围内的整数,程序将输出提示以输入其他内容。但是,如果它们输入一个字符,出于某种原因,程序只会无限循环,而不是转发相同的提示 以下是main()中的代码C++ 当用户输入除和整数之外的任何东西时,为什么我的程序无限循环输出?C++;,c++,arrays,loops,2d,infinite,C++,Arrays,Loops,2d,Infinite,因此,用户应该能够输入一个介于1-15之间的数字来移动2d游戏板上的磁贴。如果用户输入任何不在范围内的整数,程序将输出提示以输入其他内容。但是,如果它们输入一个字符,出于某种原因,程序只会无限循环,而不是转发相同的提示 以下是main()中的代码 while(!found)//如果在线路板上找不到输入,或者用户选择了非法磁贴,则会出现此重试提示,直到选择了合法磁贴 { cout您没有处理甚至没有检查读取失败 cin >> movet; 尝试读取整数。如果输入的不是整数,则读取失败,
while(!found)//如果在线路板上找不到输入,或者用户选择了非法磁贴,则会出现此重试提示,直到选择了合法磁贴
{
cout您没有处理甚至没有检查读取失败
cin >> movet;
尝试读取整数。如果输入的不是整数,则读取失败,并且失败状态设置为cin
。设置cin
的失败位后,所有后续读取操作都将失败。您可以测试cin
以查看读取是否成功,并且可以使用cin.clear()
重置流状态。例如:
while (!found) {
std::cout << "This tile is not on the board or is not adjacent to "
<< "the blank tile.\nPlease enter another numerical value "
<< "between 1 and 16: ";
if (std::cin >> movet)
found = moveTile(board, movet, blanki, blankj);
else { //invalid input, reset stream and try again
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
found = false;
}
}
while(!found){
std::cout您的代码中似乎有错误。例如,以下语句:
while(i==blanki-1||i==blanki+1||j==blankj+1||j==blankj-1)
像这样的人:
if(i==blanki-1||i==blanki+1||j==blankj+1||j==blankj-1)
因为你在第一次迭代中返回。所以,首先看看你的算法,或者在你的问题中解释一下。
当moveTile返回False时,您不会更改任何intgameBoard、blanki或blankj。因此,当此函数返回False时,它将返回False,因为您再次调用它,您将处于无限循环中。因此,我再次认为您的算法中存在问题。这是因为您为循环中的整数。很抱歉,我没有正确使用它。它应该循环,但它只是无限循环提示符的第一行,而不是让用户输入超出范围的整数。我认为std::cin
没有.reset()
,你是说.clear()
?是的,刚刚修复了它。这段代码在streamsize之后给了我“>”操作数的错误,因为数字限制不是标准的。@Jasonnumeric\u limits
是在limits
头中定义的。
while(i==blanki-1||i==blanki+1||j==blankj+1||j==blankj-1)
if(i==blanki-1||i==blanki+1||j==blankj+1||j==blankj-1)