1
bool showMenu(romanType roman){
    cout << endl;
    cout << "Just enter a number to choose an option" << endl;
    cout << "1: Print the Roman Numeral" << endl;
    cout << "2: Print the decimal value" << endl;
    cout << "3: Enter a new Roman Numeral" << endl;
    cout << "4: Quit the program" << endl;
    cout << endl;
    while (true) {

        cout << "Your choice:" << endl;
        int input;
        cin >> input;
        if (input == 1) {
            cout << roman.getRomanString() << endl;
        } else if(input ==2) {
            cout << roman.getDecimalValue() << endl;
        } else if(input == 3) {
            return true;
        } else if(input == 4) {
            return false;
        } else {
            cout << "Invalid selection, please make a valid selection." << endl;
        }
    }
}

下车,所以总的来说这很好用,我的最后一个 else 语句只是有一个小问题。只要用户输入了一个 int 类型,循环就会执行它应该做的事情,但是如果输入任何类型的字符串(即 45r、rts、3e5),循环就会停止接受用户输入并无限循环,cout( ing)无效的选择...和您的选择...一遍又一遍。我想我需要使用 .ignore() 在字符串的情况下删除 \n ,但我不知道该怎么做。我在正确的轨道上吗?

4

1 回答 1

4

是的,你在正确的轨道上。

cin >> input试图提取一个整数。如果失败,则不会从中提取符号cin并设置失败位。在这种情况下,提取将不再起作用。您必须ignore输入其余的用户输入和clear错误位:

} else {
    cout << "Invalid selection, please make a valid selection." << endl;
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');

// numeric_limits<streamsize>::max() returns the maximum size a stream can have,
// see also http://www.cplusplus.com/reference/std/limits/numeric_limits/
}

另请参阅为什么此 cin 读数会卡住?.

于 2012-06-07T19:15:46.603 回答