微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序似乎跳过了getchar

如何解决程序似乎跳过了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),但结果相同。有人可以告诉我为什么,请不要太苛刻。 预先感谢!

解决方法

fflush()之前指出的仅用于输出流,而不用于输入。

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

如果您可以掌握早期C标准的ANSI最终草案,则可以分为两部分,即规范和“合理性”,以说明做出某些选择的原因。过去,这确实帮助我学习了C。现在,我下载并保存了ISO最终草案以查看C的当前位置。

7.21.5.2 fflush功能

简介

#include int fflush(FILE * stream);

说明 如果流指向未输入最新操作的输出流或更新流,则fflush函数会使该流的所有未写入数据都被传递到主机环境中,并写入文件中;否则,行为是不确定的。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。