无限While循环故障



我在while循环中遇到了一些问题,想知道是否有人能帮忙。我正在尝试制作一个小的显示菜单程序,它将读取用户输入并根据用户的选择做出决定。我将用户输入的数字存储在一个向量中,以便稍后使用calc方法。在选择打印出向量中的元素后,我陷入了无限循环。在输入选择后,我也很难再次读取用户输入。例如,我将输入"a",但它不会起任何作用。我希望循环不断迭代并显示菜单选项,直到用户输入Q表示退出。

#include <iostream>
#include <vector>
using namespace std;
//Display function
void display_menu()
{
cout<< "P - Print numbern"<<"A - Add a number to the list n"<< "M - Display mean of numbersn"
<< "S - Display smallest Numbern"<<"L - Display largest numbern"
<< "Q - Quitn"<<"Please select an optionn";

}
//Decision structure depending on user choice
void user_choice()
{
display_menu();
vector<size_t> list{};
char choice;
cin>>choice;
while(choice != 'Q' || choice != 'q'){
//cout<<"enter another selectionn";
if(choice == 'P' || choice == 'p')
{
if(list.empty())
{
cout<< "List is emptyn";
}
else
{
for(size_t i = 0; i<list.size(); i++)
{
cout<< list[i];
}
}
display_menu();
}

else if(choice == 'A' || choice == 'a')
{
cout<< "Enter a number to add to the listn";
for(size_t i = 0; i <= list.size(); i++)
{
//cin>>choice;
list.push_back(choice);
}
}
}
}
int main()
{
//cout << "Hello world!" << endl;
user_choice();
return 0;
}

问题是,您读取循环外的用户输入(cin>>choice;(,因此读取用户的偏好,做一些事情,然后显示菜单,但随后不重新读取用户的选择,因此循环重新运行(您在while循环中(,choice的值相同。由于你从未重读过选择,它永远不会改变,你的循环永远不会退出。

正如@SamVarshavchik在他的评论中指出的那样,你还有一个额外的问题,即choice != 'Q' || choice != 'q'总是真的——例如,如果choice=='Q',那么choice != 'q'是真的,所以||是真的。因此,您也必须解决这个问题(将||更改为&&或执行tolower并只检查小写字母或类似的内容应该可以解决这个问题(。

最新更新