首页 > 解决方案 > 程序似乎跳过了 getchar()

问题描述

所以我是 C 编码和一般编码的新手。我正在用一本书和那里的代码学习,但我不知道为什么。这可能是一件微不足道的事情,但正如我所说..我是一个该死的菜鸟。无论如何,这是代码:

#include <stdio.h>

void main()
{
    char a, b;
    
    printf("Welches Zeichen ist groesser?");
    printf("\nGeben Sie ein Zeichen ein:");
    a = getchar();
    printf("Nun ein anderes Zeichen:");
    fflush(stdin);
    b = getchar();
    
    if( a > b)
    {
        printf("'%c' ist groesser als '%c'!\n", a, b);
    }
    else if( b > a)
    {
        printf("\n'%c' ist groesser als '%c'!\n", b, a);
    }
    else
    {
    printf("\nBitte nicht zweimal das gleiche Zeichen eingeben!");
    }
}

我没有收到任何编译器错误消息,它似乎只是“跳过”第二个 getchar 并直接进入最后一个 printf。我觉得它与 fflush(stdin) 有关。它是否在代码中并不重要。我已经尝试过 fflush(stdout) 但结果相同。有人可以告诉我为什么,请不要太苛刻。提前致谢!

标签: cfflush

解决方案


如前所述 fflush() 仅用于输出流,而不是输入。

阅读不同的行 fgets() 可能对您很有吸引力。不需要 fflush()。

如果你能掌握早期 C 标准的 ANSI 最终草案,它有两个部分,规范和说明为什么做出某些选择的“理由”。它真的帮助我在那些日子里学习 C。现在,我下载并保存 ISO 最终草案以查看 C 现在的位置。

7.21.5.2 fflush 函数

概要

#include <stdio.h> int fflush(FILE *stream);

说明 如果 stream 指向一个输出流或更新流,其中没有输入最近的操作, fflush 函数会导致该流的任何未写入数据被传递到主机环境以写入文件;否则,行为未定义。

如果 stream 是空指针,则 fflush 函数对上面定义了行为的所有流执行此刷新操作


推荐阅读