为什么我要重复介绍一下?

Luc*_*cio 3 c string char

我想读两个char所以我做了以下代码:

main() {
    char a,b;

    printf("\nEnter the first char.. ");
    a=getchar();
    printf("\nEnter the second char.. ");
    b=getchar();
    b=getchar();       //<--I've to add this sentence because the previously doesn't work

    printf("\nFirst char --> %c",a);
    printf("\nSecond char --> %c",b);

}
Run Code Online (Sandbox Code Playgroud)

代码不应该工作,但确实如此.输出是正确的:

第一个字符 - > z

第二个字符 - > z('z'或我想要的字符)

如果我删除第二个,getchar()那么输出是:

第一个字符 - > z

第二个字符 - >(这里没有字符)

如何在getchar()没有任何错误的情况下删除第二个?

因为fflush(stdin)以前getchar()不行.

Ker*_* SB 7

试试这个:制作一个文件data,大小包含两个字节ab.现在说:

./myprogram < data
Run Code Online (Sandbox Code Playgroud)

瞧.

关键是,当您操作终端并按下a回车键时,您将向流程发送两个字符a,然后\n是新行.所以第二个getchar拿起换行符.

(并且您的终端不允许您在不按Enter的情况下发送单个字符,因为它具有在发送任何内容之前填充的行缓冲区.)

简而言之,getchar是一个糟糕的I/O原语,你几乎总是喜欢fgets阅读整行并处理它们.