我的输入被消耗了

时间:2014-12-10 10:11:49

标签: c scanf

这里我有一个无限的do-while循环,要求输入,当我输入1,2,3和4时,它工作正常,当我输入任何其他数字时,它也可以正常工作。 / p>

但是当我输入一个字母或一个特殊字符时,它会按预期方式浏览代码并显示“再试一次”消息。但它不允许我在此之后输入任何内容,要么代码正在清除并且不断显示,要么它只是被冻结了。无论哪种方式,我都需要能够解决这个问题。

do
 {
    system("cls");

    printf("What would you like to do?");
    printf("\n1.View the databases");
    printf("\n2.Add data");
    printf("\n3.Create new user");
    printf("\n\n\n4.Exit");
    printf("\n\n\n");
    scanf("\n%d",&Choice);

    if(Choice == 1 ) //Selection
    {
         system("color 0c"); //Function's are color coded
         View();
    }
    else if(Choice == 2)
    {
         system("color 0e");
         Edit();
    }
    else if(Choice == 3)
    {
         system("color 0a");
         Append();
    }
    else if(Choice == 4)
    {
         exit(0);
    }
    else
    {
         printf("Try again");
         getch();
     }
}
while(1==1);//Infinite loop
}

输入:“a”,预期输出:再试一次..(再次请求输入)。实际输出:再试一次(无法输入输入)

2 个答案:

答案 0 :(得分:4)

您应该检查scanf()的返回值是否成功完成。查看手册页here

否则,即使scanf()失败,您的条件检查也会继续执行,Choice可能包含错误的值。

注意:如果第一次scanf()失败,您将遇到read-before-write secnario [如果choice未初始化,那么可能会很好地导致到undefined behaviour

答案 1 :(得分:0)

尝试代替此

scanf("\n%d",&Choice);

这样:

scanf("%d",&Choice);
printf("\n");

我知道它看起来很简陋,但我自己也有这个问题,有时scanf可能是马车或行为真的很奇怪。只是试一试