getchar的意外行为

fla*_*821 1 c getchar do-while

只是学习C编程,坚持我确定的Do/While循环是微不足道的.我有一段代码需要用户点击'E'退出程序:

char exitletter;

do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
} while (exitletter !='E');
Run Code Online (Sandbox Code Playgroud)

但是,如果用户输入了错误的字符,则会打印两次"请按E退出程序".如果用户输入say abcd,则会打印消息五次.

有人可以解释一下这里发生了什么吗?

ras*_*hok 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');
Run Code Online (Sandbox Code Playgroud)