使用户每次在C

时间:2019-11-21 02:47:52

标签: c

在以下代码中:

#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()之前的输入缓冲区以使其起作用?

2 个答案:

答案 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;
 }