**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我试着用这个函数来测试一个布尔数组在用户选择的坐标上是否为真。当它为真时,它会一遍又一遍地运行while循环,直到最后输入一个以前没有用过的坐标。
如果没有cout语句,它可以正常工作,但每当我在while循环中放入cout语句时,它就会无限地运行cout语句,而不允许我输入新的坐标。
int const ROW = 4;
int const COL = 4;
void confirm(bool mask_array[ROW][COL],int &input1,int &input2);
int main() {
int row;
int coll;
bool mask[ROW][COL] = {
{true,true,true,true},
{true,true,true,true},
{true,true,true,true},
{true,true,true,true}
};
cout << "enter row: ";
cin >> row;
cout << "enter column: ";
cin >> coll;
confirm(mask, row, coll);
}
void confirm(bool mask_array[ROW][COL],int &input1,int &input2) {
while (mask_array[input1][input2] == true )
cout << "enter again" << endl;
cin >> input1;
cin >> input2;
}
2条答案
按热度按时间insrf1ej1#
while
循环只会执行一个语句,除非你用大括号{ }
组成一个复合语句。cin
语句在它的外部。vof42yt12#
只要
mask_array[input1][input2]
中的内容没有被转换为布尔值false
,下面循环中的条件就是true
:0
的值会转换为false
,其他值则为true
。下面几行的缩进无关紧要。C++编译器不关心缩进。它将执行条件后面的语句。
在
while ( condition ) statement
中,* 复合语句 * 必须用花括号括起来,就像while ( condition ) { /* do stuff */ }
一样。只要condition
是(转换成)true
,花括号内的所有内容都会被重复执行。要使其成为正确的"检查并重试"循环,请执行以下操作:
在这种情况下,您可以使用类似下面的helper函数: