c - 无限输入直到出现空白
问题描述
我怎样才能制作一个“无限”阅读器来阅读每个输入,直到用户按下回车键?如:
#include <stdio.h>
int main()
{
int A;
scanf("%i", &A);
/// here i'd like to insert a loop function that will repeat every time the user insert a number
scanf("%i, &A);
printf("Number: ", A);
/// end loop
return 0;
}
解决方案
制作一个“无限”阅读器来读取每个输入,直到用户按下回车键?
通过通常的方式阅读一长行可能无法真正做到这一点。
线路限制
实现应支持行包含至少 254 个字符的文本文件,包括终止换行符。宏的值
BUFSIZ
应至少为 256。 C17dr § 7.21.2 9
也许您的实现可以处理更多或无限 - 或者代码限制为 254。
输入缓冲
stdin
通常是行缓冲的。因此,在scanf()
输入包括'\n'
. 如果您可以在输入中使用退格键来删除数据,则很可能是这种情况。
有一些方法可以覆盖缓冲,一些是标准的,一些是特定于实现的。你会需要这些。我想这只是关于 OP 目标的部分答案。
建议改为使用缓冲区读取一行用户输入,然后对其进行解析。fgets()
char buffer[BUFSIZ + 1]
char buffer[BUFSIZ+1];
while (fgets(buffer, sizeof buffer, stdin)) {
// Parse the line looking for an int
// Best to use strtol and family, here, for simplicity, use `sscanf()`
int A;
int count = sscanf(buffer, "%i", &A);
if (count == 1) {
printf("%d\n", A);
} else if (buffer[0] == '\n') {
break;
} else {
printf("Unexpected input <%s>\n", buffer);
break;
}
}
scanf("%i", &A);
缺乏检测一行的能力,就像"\n"
读取一样"%i"
,悄悄地消耗所有前导空白(包括换行符),直到出现非空白。
推荐阅读
- python - Django 模型序列化器
- python - django bootstrap navbar 下拉元素在使用相同的 base.html 时没有出现在其他 url
- r - 根据 R 中的日期序列填充行
- tensorflow - 用于时间序列预测的编码器解码器
- c - 为什么我在 C malloc 结束时得到一个垃圾值?
- javascript - Why does the script make all the elements work simultaneously and not like they are separate objects
- linux - how to add multiple files in Linker_Flag variable in scilab?
- rest - 有没有办法使用 API 列出拉取请求文件(来自源分支)及其在 Azure Devops 中的位置?还有其他使用 C# 的方法吗?
- python - 如何在unittest python中的startTest()之前运行setup()
- reactjs - 通过 react-router 中的钩子访问 staticContext