Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Loops - Fatal编程技术网

循环C中的重复错误

循环C中的重复错误,c,loops,C,Loops,我只是有一个循环,如果输入了无效的选项,它将返回开始 do{ printf("Please enter a option, Press 'q' to quit\n"); scanf("%d",&option); if(option == 1){ option1(...); break; }else if(option ==

我只是有一个循环,如果输入了无效的选项,它将返回开始

    do{                     
        printf("Please enter a option, Press 'q' to quit\n"); 
        scanf("%d",&option);

        if(option == 1){
            option1(...);
            break;
        }else if(option == 2){
            option1(...);
            break;
        }else if(option == 3){
            option1(...);
            break;
        }else if(option == false){
            printf("exit\n");
            exit(EXIT_SUCCESS);
        }else{
            continue;
        }
    } while(true);
我的问题是

如果我运行它并输入一个输入,例如:“5”,它将返回到do语句的开头,我必须输入另一个输入

如果我输入'q'退出循环,循环会变得疯狂并不断重复。

不使用scanf%d读取'q'。。。。因此,选项可能没有任何值被切换,因此将执行重复循环的默认情况。这就是你看到的。 补救措施:

任何非数字输入都意味着中断:只需保持一切不变,但更改将继续中断并退出循环

捕捉非数字输入并处理它。scanf手册页面上说:

这些函数返回成功匹配的输入项目数 分配

您可以检查scanf返回值,如果为0,则尝试在另一个语句中扫描字母;如果是“q”,则中断

立即读取一个字符似乎是最干净的,并切换该字符,而不是它所表示的int值


如果您想使用q退出程序,您应该将变量选项声明为char

例如:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char option;
    do
    {                     
        printf("Please enter a option, Press 'q' to quit\n"); 
        scanf(" %c",&option);

        if(option == '1')
        {
            //option1(...);
            printf("%c",option);
            break;
        }
        else if(option == '2')
        {
            //option1(...);
            printf("%c",option);
            break;
        }
        else if(option == '3')
        {
            //option1(...);
            printf("%c",option);
            break;
        }
        else if(option == 'q')
        {
            printf("exit\n");
            exit(EXIT_SUCCESS);
        }
        else
        {
            continue;
        }
    } while(1);
    return 0;
}

选项的类型是否可能重复?你为什么要把它和false比较呢?你可以把它们读作字符char,然后把它们和字符'1','2','q'比较。注意换行符。