【发布时间】:2020-12-03 11:34:17
【问题描述】:
我正在尝试从 C 中的标准输入(我的键盘)读取几行,但我无法做到这一点。
我的输入是这样的:
3
first line
second line
third line
这是我的代码:
char input[2], s[200];
if (fgets(input, 2, stdin) != NULL) {
printf("%d\n", input[0]);
for (int i = 1; i <= input[0] - '0'; i++) {
if (fgets(s, 20, stdin) != NULL)
printf("%d\n", s[1]);
}
}
这个函数,“fgets”似乎正在读取我的新行字符,用 ASCII 编码的 10。 顺便说一句,我在 linux 终端中运行我的代码。
【问题讨论】:
-
没错,
fget()也会读取换行符(如果有空间)。这样,您就知道读取了完整的行,而不是缓冲区已满。但程序行为是未定义的,因为fgets(s, 20, stdin)需要大小为 20 的缓冲区,而不是s[2]中可用的 2。