Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的重复循环+; 是C++中简单菜单的代码。出于某种原因,如果您给它垃圾输入,它将正确响应(“请再次尝试您的选择”)。然而,它将再次通过循环,再次给出错误消息,然后最终恢复正常运行_C++_Loops - Fatal编程技术网

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

C+中的重复循环+; 是C++中简单菜单的代码。出于某种原因,如果您给它垃圾输入,它将正确响应(“请再次尝试您的选择”)。然而,它将再次通过循环,再次给出错误消息,然后最终恢复正常运行,c++,loops,C++,Loops,编辑 输入变量是一个字符。如果垃圾输入只有一个字符长,那么循环将按预期工作。如果有任何其他字符将导致循环在允许用户再次输入任何内容之前执行多次 char input = 0; while (input != 4) { cout << "1. Circle"; cout << "\n2. Rectangle"; cout << "\n3. Triangle"; cout << "\n4. Quit";

编辑

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

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";
}
char输入=0;
while(输入!=4)
{

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

std::cin.clear();
然后忽略输入流中的所有内容

std::cin.ignore(INT_MAX);

这将使cin缓冲区处于良好状态,提取操作符(>>)应正常工作。

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

    cin.ignore(20, '\n');

请参阅此常见问题解答:--您使用的
ignore
错误,并且没有调用
clear
。我假设输入是一个int。您到底在问什么?正如Xero的回答,std::cin.clear()应该修复它,但要注意您的输入类型,它看起来像是在while语句中将它作为一个数字进行比较,但在case语句中它是一个char.有趣的..如果垃圾输入只有一个字符长,则程序可以正常运行。如果有任何其他字符使程序循环两次。请更改您的cin.ignore()到cin.ignore(INT_MAX);我不在linux上,因此无法进行测试,但您应该能够按照这些思路解决您的问题。由于某种原因,这会导致程序中断。您将收到错误消息“请重试您的代码”然后什么都没有。如果你也输入正常的输入,结果是一样的。它不会再次显示菜单,也不会接受任何输入。