刚刚学习C编程,坚持我确信Do / While循环是微不足道的。我有一段代码需要用户点击'E'退出程序:
char exitletter;
do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
} while (exitletter !='E');
但是,如果用户输入了错误的字符,则会打印两次“请按E退出程序”。如果用户输入say abcd,则会打印五次消息。
有人可以解释一下这里发生了什么吗?
答案 0 :(得分:5)
这是因为在第一个getchar
考虑您是按N
然后按enter
键来提供输入方式。实际上,您输入两个字符,一个是N
,另一个是换行符(\n
)。首先getchar
将从N
读取stdin
,换行符字符将保留在stdin
缓冲区中。现在它将打印出声明,然后它将尝试进入第二个getchar
,那时它不会等你输入,因为stdin
缓冲区中已有一个字符可用,所以它会读取该行然后它将使用E
进行检查,此时循环也不会中断,它将打印statemnt,它将在第3 getchar
等待用户输入输入。
如果向getchar
提供输入的方式就像输入该字符并按Enter键意味着,请使用以下逻辑来帮助您摆脱此问题。
do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
while(exitletter == '\n')exitletter = getchar();
} while (exitletter !='E');
答案 1 :(得分:1)
虽然迟到了另一个答案:
您可以在阅读完角色后立即致电fflush
。
char exitletter;
do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
fflush(stdin);
}
while (exitletter !='E');
这会像你期望的那样奏效。