问题描述
所以我是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
说明 如果流指向未输入最新操作的输出流或更新流,则fflush函数会使该流的所有未写入数据都被传递到主机环境中,并写入文件中;否则,行为是不确定的。
如果stream是一个空指针,则fflush函数会对上面定义了行为的所有流执行此刷新动作