首页 > 解决方案 > c++中的无限do-while循环

问题描述

该函数displayMenu()在 Main 条件下被调用while(menuChoice != Q),但函数本身有一个内部无限循环。

关于为什么显示菜单功能中的循环是无限的任何帮助都会很棒......我认为这可能与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();
}

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

解决方案


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');

推荐阅读