c - 程序似乎跳过了 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 <stdio.h> int fflush(FILE *stream);
说明 如果 stream 指向一个输出流或更新流,其中没有输入最近的操作, fflush 函数会导致该流的任何未写入数据被传递到主机环境以写入文件;否则,行为未定义。
如果 stream 是空指针,则 fflush 函数对上面定义了行为的所有流执行此刷新操作
推荐阅读
- c - Linux中C中的分段错误(核心转储)
- django - DocuSign Python SDK - API 异常 400 - “错误请求”
- python-3.x - Python 3 MQTT 客户端在 Sqlite 中存储接收到的有效负载 - 打开数据库一次,存储多次,最后关闭数据库?
- python - 即使在使用 PySpark 读取 .ORC 文件时明确指定,也缺少标题
- json - 从包含 JSON 的 API 链接导入数据到 EXCEL
- python - 拆分 2 个单词单元格并使用 python 插入新行
- html - 鼠标悬停时背景图像不会改变
- php - PHP:如何根据来自 SQL 组的记录通过查询在 TCPDF 中进行页面分组/分页
- python-3.x - Python Twisted 连续重新连接尝试
- python - Matplotlib:将线收集到同一轴上