验证输入

验证输入

问题描述:

cin >> menuChoice; 

while (!(cin >> menuChoice)) 
{ 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

我想'捕捉'一个字符串,以便程序不会崩溃或进入连续循环,因此我输入了上面的while循环。看起来不错。直到我输入0进入菜单选项 - !(cin >> menuChoice)被调用,即使它是有效的输入(我将使用另一个循环来确保它在范围内,但只要它是一个int,它应该没问题,这就是我的想法。验证输入

我甚至只是while循环之前,但无济于事尝试了

if (menuChoice == 0) 
    menuchoice = 6; 

任何援助?

我期待继续菜单和验证部分分开(目前它的功能,但我会改变他们我未来到班级)。

验证部分云:

while (!(cin >> menuChoice)) 
{ 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

while (menuChoice < 1 || menuChoice > 4) 
{ 
    cout << "invalid selection, please enter a number from the menu 2" << endl; 
    cin >> menuChoice; //here is where there is a problem 

    while (!(cin >> menuChoice)) 
    { 
     cout << "invalid selection, please enter a number from the menu 3" << endl; 
     cin.clear(); 
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 

} 

while循环1 - 捕捉任何初始字符串输入 while循环2 - 确保正确范围 while循环3 - 捕捉任何字符串输入,用户可以输入一个第二时间

原来它仅仅是

cin>> menuChoice; 

while (!cin) 
    { 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    cin>> menuChoice; 
    } 

所需要(以及代码等的其余部分)