我有一个程序可以构建一个影院的2D阵列。用户可以按位置选择座位,并且货币金额改变为0以指示座位被占用。另一种选择座位的方法是按价格选择。因此,用户输入价格,for循环遍历数组并找到该价格的第一个实例并将其替换为0,然后停止。或者至少那是我试图做的事情。在实践中,它将所有这些值替换为0.我尝试使用while循环在条件满足后将其关闭,但这不起作用。这是我的(相关)代码。
while (flag == true)
{
cout << "\n";
cout << "You may select tickets by seat or by price. Enter 1 to select by price, or 2 to select a seat. Enter 3 if you'd like to quit." << endl;
cin >> userSelection;
if (userSelection == 1)
{
cout << "What price would you like to search for? " << endl;
cin >> priceSelection;
while (searchFlag == true)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 10; j++)
{
if (Theater [i][j] == priceSelection)
{
Theater [i][j] = 0;
searchFlag = false;
}
}
}
for (int i = 0; i < 9; i++) // This for loop is going to output our array so the user can see pricing.
{
for (int j = 0; j < 10; j++)
{
cout << Theater [i][j] << " ";
}
cout << "\n";
}
}
}
我不确定真正需要改变的是什么,以便在找到并更改第一个价格后它会停止。另外,如果有必要,我不介意复制/粘贴我的其余代码。
答案 0 :(得分:1)
对未来提出一些建议,
不要硬编码循环终止条件,即(i < 9)
。拥有阵列的当前长度或座位数。这样你就可以添加更多,这仍然有效。
即使你在if语句中将search flag设置为false,你仍然会继续遍历每个for循环。因此,您每次都会遍历每个座位。如果当前座位的价格永远不会与用户输入的价格相匹配,那么您将进入无限循环。尝试将内部for循环更改为
for (int j = 0; j < someCurrentLengthOfArray && searchFlag; j++)
通过这种方式,您将检查价格是否匹配以及是否指向数组的未指定末尾。
正如其中一条评论中所提到的,为什么这是2D阵列?
答案 1 :(得分:0)
你的while循环在for循环之外,所以在你回到while循环之前所有的替换都完成了。如果您使用@DieterLücking建议并只使用一维数组,您可以使用一个while循环
int i =0;
while (searchFlag == true)
{
// ..check for seats
if (seatFound)
{
searchFlag = false;
}
i++;
}
对于2D数组,您仍然可以使用while循环方法,它只需要两个。
答案 2 :(得分:0)
更改你的for循环:
for (int i = 0; i < 9 && searchFlag; i++)
{
for (int j = 0; j < 10 && searchFlag; j++)
{
if (Theater [i][j] == priceSelection)
{
Theater [i][j] = 0;
searchFlag = false;
}
}
}
他们现在的样子,不管怎么样,他们都会不停地反复,直到最后。如果你按照我上面的说明进行操作,当searchFlag设置为true时它们将会中断,然后拉回到外部while循环中,然后它将会中断。