在以下代码中:
#include <stdio.h>
int main()
{
char foo;
scanf("%c", &foo);
printf("%c\n", foo);
getchar();
return 0;
}
如果用户输入了任何内容,则getchar()
被“忽略”,但是当按下回车键时,getchar()
要求输入。可能的解决方案是将第二个getchar()
放在第二位,但是如果第一个输入为空,则用户必须按Enter键两次,并且如果第一个输入中有缓冲区,也将被忽略。我想要的是让用户仅按一次Enter键,无论用户输入什么内容。我已经读过有关fflush(stdin)
的内容,但对我来说不起作用。因此,基本上,是否有一种方法可以清除getchar()
之前的输入缓冲区以使其起作用?
答案 0 :(得分:1)
对于交互式程序,需要对输入进行更多控制,请考虑使用fgets
读取行,并使用sscanf
进行解析。这将使代码决定何时“刷新”该行上的剩余字符
main(...)
{
char buff[200] ;
if ( !fgets(buff, sizeof(buff), stdin) ) {
// Error
} ;
char foo ;
sscanf(buff, "%c", &foo) ;
// next fgets (and getchar) will force reading a line!
}
答案 1 :(得分:0)
通过不调用 getchar(); ,只需按一次Enter键
#include <stdio.h>
int main()
{
char foo;
scanf("%c", &foo);
printf("%c\n", foo);
return 0;
}