0

下面是 C++ 中一个简单菜单的代码。出于某种原因,如果你给它垃圾输入它会正确反应(“请再次尝试你的选择”)。然而,它会再次通过循环再次给出错误消息,然后最终恢复正常运行。

编辑

输入变量是一个字符。如果垃圾输入只有一个字符长,则循环按预期工作。如果在允许用户再次输入任何内容之前,有任何其他字符将导致循环多次执行。

char input = 0;
    while (input != 4)
{
    cout << "1. Circle";
    cout << "\n2. Rectangle";
    cout << "\n3. Triangle";
    cout << "\n4. Quit";
    cout << "\nChoose a shape: ";
    cin >> input;

    switch(input)
    {
    case '1':
        circleFunctions();
        break;
    case '2':
        rectangleFunctions();
        break;
    case '3':           
        triangleFunctions();
        break;
    case '4':
        exit(4);
    default:
        cout << "\nPlease try your selection again...\n";
        input = NULL;
        cin.ignore();
        break;
    }

    cin.ignore();
    cout << "\n";
}
4

2 回答 2

1

当遇到默认情况时,您只需要清除输入缓冲区,

std::cin.clear();

之后忽略输入流中的所有内容,

std::cin.ignore(INT_MAX);

这应该使 cin 缓冲区处于良好状态,并且提取运算符 (>>) 应该可以正常工作。

于 2012-08-05T00:19:53.153 回答
0

找到了答案。将以下参数添加到 cin.ignore 使其工作:

    cin.ignore(20, '\n');
于 2012-08-05T00:42:22.907 回答