c - 在 C 中使用 fgets() 处理 CTRL+D 的输入
问题描述
我使用 do-while 循环从用户那里获取标准输入,并包含基本的错误处理:
#include <stdio.h>
int validateInput(char *buffer, int bufferSize)
{
if (fgets(buffer, bufferSize, stdin) == NULL) /* If fgets() errors */
{
fprintf(stderr, "ERROR: Malformed input\n");
return 1;
}
return 0;
}
int main()
{
char buffer[1024];
do
{
printf("\nInput stuff: ");
} while (validateInput(buffer, sizeof(buffer)) == 1);
return 0;
}
代码运行良好,并且if
在第一次检查缓冲区溢出之后还有第二条语句(未显示,但因此是函数的第二个参数),它也可以正常工作。
问题是如果我CTRL+D
自己输入(<some input> then CTRL+D
工作正常),代码将无限期地输出printf
和fprintf
,不允许任何进一步的用户输入。
我怀疑这是一个怪癖,没有正确刷新输入流或其他东西,但到目前为止我的解决方案还没有奏效。
解决方案
推荐阅读
- google-play-services - 恢复出厂设置 Google Nexus 7 (2013)
- ios - iOS:绘制图表
- reactjs - Reactjs将特定行插入表格顶部
- angular9 - 为 ViewChild 的静态设置全局值
- flutter - 在 Flutter 的平板电脑上制作固定的应用范围菜单而不是 Drawer
- excel - Excel 搜索多个工作簿
- flutter - 如何在 Column 或 ListView 中返回小部件?
- javascript - 错误类型错误:无法获取未定义或空引用的属性“0” - 当在控制台中的 HTML_Element 上单击()时
- laravel - 在同一请求中获取具有父类别的子类别
- selenium - 在 selenium 中未使用 JavascriptExecutor 选择日期