Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当用户输入除和整数之外的任何东西时,为什么我的程序无限循环输出?C++;_C++_Arrays_Loops_2d_Infinite - Fatal编程技术网

C++ 当用户输入除和整数之外的任何东西时,为什么我的程序无限循环输出?C++;

C++ 当用户输入除和整数之外的任何东西时,为什么我的程序无限循环输出?C++;,c++,arrays,loops,2d,infinite,C++,Arrays,Loops,2d,Infinite,因此,用户应该能够输入一个介于1-15之间的数字来移动2d游戏板上的磁贴。如果用户输入任何不在范围内的整数,程序将输出提示以输入其他内容。但是,如果它们输入一个字符,出于某种原因,程序只会无限循环,而不是转发相同的提示 以下是main()中的代码 while(!found)//如果在线路板上找不到输入,或者用户选择了非法磁贴,则会出现此重试提示,直到选择了合法磁贴 { cout您没有处理甚至没有检查读取失败 cin >> movet; 尝试读取整数。如果输入的不是整数,则读取失败,

因此,用户应该能够输入一个介于1-15之间的数字来移动2d游戏板上的磁贴。如果用户输入任何不在范围内的整数,程序将输出提示以输入其他内容。但是,如果它们输入一个字符,出于某种原因,程序只会无限循环,而不是转发相同的提示

以下是main()中的代码

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之后给了我“>”操作数的错误,因为数字限制不是标准的。@Jason
numeric\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)