此函数displayMenu()
在条件while(menuChoice != Q)
下在Main中被调用,但是该函数本身具有内部无限循环。
关于为什么显示菜单功能的循环是无限的任何帮助都将是很棒的……我认为这可能与do-while
结构或关系运算符!=
的工作不正常有关。
FUNCTION DISPLAYMENU:
char displayMenu()
{
// can be useful info during development
cout << "Entered function displayMenu..." << endl;
char whatToDo = '?';
do {
//Display Menu Options
cout <<"Upload a regional sales data file \tU" <<endl;
cout <<"display details (All loaded data) \tA" <<endl;
cout <<"list details for specific Order number \tO" <<endl;
cout <<"display summary by Region \tR" <<endl;
cout <<"display summary by print method \tM" <<endl;
cout <<"Clear all data \tC" <<endl;
cout <<"Quit \tQ" <<endl;
cout <<"\nPlease Enter Your Menu Choice: " <<endl;
cin >> whatToDo;
} while (whatToDo != 'U' ||
whatToDo != 'A' ||
whatToDo != 'O' ||
whatToDo != 'R' ||
whatToDo != 'M' ||
whatToDo != 'C' ||
whatToDo != 'Q');
// can be useful info during development
cout << "Returning " << whatToDo << " from displayMenu..." << endl;
return whatToDo;
} // END function displayMenu()
FUNCTION MAIN
while (menuChoice != 'Q'){
menuChoice = displayMenu();
}
答案 0 :(得分:1)
while (whatToDo != 'U' ||
whatToDo != 'A' ||
whatToDo != 'O' ||
whatToDo != 'R' ||
whatToDo != 'M' ||
whatToDo != 'C' ||
whatToDo != 'Q');
无论whatToDo
是什么,这些条件中至少有6个是true
,所以您会遇到无限循环。
您要保持循环直到其中一个条件为false
。
您应该改用这样的东西:
while (whatToDo != 'U' &&
whatToDo != 'A' &&
whatToDo != 'O' &&
whatToDo != 'R' &&
whatToDo != 'M' &&
whatToDo != 'C' &&
whatToDo != 'Q');
答案 1 :(得分:1)
此条件永远不会导致“ false”,这当然会导致无休止的while循环。这只是您ORed条件的一部分。
whatToDo != 'U' || whatToDo != 'A'
这将要求whatToDo
同时与“ U”和“ A”相同。
您可能想要的是
whatToDo != 'U' && whatToDo != 'A'
“只要whatToDo既不是A也不是U ...”,根据
!A && !B
和
!(A || B)
后者是“ NOR”的更明显的用语。