这里我有一个无限的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”,预期输出:再试一次..(再次请求输入)。实际输出:再试一次(无法输入输入)
答案 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可能是马车或行为真的很奇怪。只是试一试