【发布时间】:2017-06-24 02:40:25
【问题描述】:
我想知道fgets() 是否从用户输入(即键盘)读取新行字符。这是我写的一些示例代码:
while (1) {
char userInput[3] = {'\0', '\0', '\0'};
fgets(userInput, 3, stdin);
flushStdin();
printf("%s\n", userInput);
}
如果我输入'2',系统会再次提示我输入另一个字符,结果如下:
$ 2
$ 3
2
$
我了解fgets() 的工作原理,因此可能是我的逻辑不正确。所需的输出是:
$ 2
2
$
【问题讨论】:
-
$来自哪里?您的代码似乎比您显示的要多。请提供minimal reproducible example。 -
我不明白你的问题,
fgets()读取整行或3字符,如果它们先插入。所以它枯萎了,一直读到'\n'或者直到目标缓冲区中没有更多空间。 -
什么是
flushStdin()?您 cannot do that 没有调用未定义的行为(例如fflush(stdin))或使用特定于平台的 API.. -
试试
printf("%d %d %d\n", userInput[0], userInput[1], userInput[2]);看看读了什么。
标签: c string char newline fgets