刚刚学习 C 编程,并坚持我确定的关于 Do/While 循环的一些微不足道的事情。我有一段代码要求用户按“E”退出程序:
char exitletter;
do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
} while (exitletter !='E');
但是,如果用户输入的字符不正确,它会打印两次“请按 E 退出程序”。如果用户输入 abcd,它会打印五次消息。
有人可以解释一下这里发生了什么吗?
最佳答案
那是因为在第一次 getchar
考虑一下,如果您按 N
然后按 enter
键来提供输入方式。实际上,您输入了两个字符,一个是 N
,另一个是换行符 (\n
)。首先 getchar
将从 stdin
中读取 N
并且换行符保留在 stdin
缓冲区本身中。现在它会打印语句然后它会尝试去第二次 getchar
那个时候它不会等待你输入因为一个字符已经在 stdin
缓冲区中可用,所以它会读取换行符,然后用 E
检查,这次循环也不会中断,它会打印 statemnt,它会在第三个 getchar
等待用户输入。
如果向 getchar
提供输入的方式类似于键入该字符并按回车键意味着,请使用以下逻辑来帮助您摆脱此问题。
do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
while(exitletter == '\n')exitletter = getchar();
} while (exitletter !='E');
关于c - getchar 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665166/