循环C中的重复错误

时间:2014-10-20 09:57:40

标签: c loops

如果输入的选项无效,我只有一个循环返回到开头

    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'退出循环变得疯狂并不断重复。

2 个答案:

答案 0 :(得分:3)

如果要使用q退出程序,则应将变量option声明为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;
}

答案 1 :(得分:-1)

&#39; q&#39;未使用scanf("%d"...阅读。因此,option可能没有切换的值,因此执行重复循环的默认情况。这就是你所看到的。 补救措施:

  1. 任何非数字输入都意味着中断:只需按原样保留所有内容,但将continue更改为break并退出循环。

  2. 捕获非数字输入并处理它。 scanf手册页(http://linux.die.net/man/3/scanf)说:

      

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

    您可以检查scanf返回值,如果为0,则尝试在另一个语句中扫描该字母;如果&#39; q&#39;,中断。

  3. 立即读取一个字符(似乎最干净)并切换字符,而不是它所代表的int值。