C ++中的无限do-while循环

时间:2019-10-30 02:46:15

标签: c++ c++11 do-while

此函数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();
}

2 个答案:

答案 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”的更明显的用语。