【发布时间】:2014-10-13 11:37:35
【问题描述】:
我对 fgets 有一些疑问。据我所知,它在字符串末尾添加“\n”,而不是“\0”。所以如果我写这段代码:
fgets(buff,2,stdin);
printf("%s",buff);
所以 fgets 读取两个字符,我输入“y”,所以 buff 应该是“y\n”。我希望 printf 打印 y 并添加一行,而它打印“y”而不添加一行。你能解释一下原因吗?
【问题讨论】:
-
它在字符串末尾添加“\0”,而不是“\n”。
-
你检查了fgets doc 看它说什么了吗?
-
您必须按 ENTER(
'\n')才能退出fgets()。在您的具体情况下,buff[0] == 'y'和buff[1] == 0。'\n'仍在键盘缓冲区中等待。 -
@pmg 好吧,更准确地说,您需要按 Enter 将您输入的文本发送到 stdin (如果您处于行缓冲模式,因为您通常处于控制台应用程序)。
fgets本身将在不等待 Enter 的情况下返回完整的缓冲区,由于外部原因,如果用户不按 Enter(通常),它就无法获得完整的缓冲区。