gpt4 book ai didi

c - fgets 读取比应有的更多的字符

转载 作者:行者123 更新时间:2023-11-30 19:12:16 25 4
gpt4 key购买 nike

我正在开发一个代码,用户将键入几个段落,当用户以“END”开始段落时,它将停止阅读。代码将通过计算每个字母并显示图表和等等来操作字符串,但这与问题无关。问题是:哪个段落不得超过 1000 个字符。

代码的较小版本如下(考虑到我只想存储 5 个字符的字符串 - 尽管我会扩展它)。

#include <stdio.h>
#include <string.h>

int main()
{
char paragraph[5];

for ( ; ; )
{
fgets(paragraph, 5, stdin);

if (paragraph[0]=='E' && paragraph[1]=='N' && paragraph[2]=='D')
{ return 0; }

printf("%s", paragraph);
}

return 0;

我的问题是:如果我输入超过5个字符,printf函数仍然打印超过5个字符,我不知道为什么。我已经检查了我能检查的所有内容。

请帮助像我这样的初学者。

最佳答案

fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A terminating null byte ('\0') is stored after the last character in the buffer.

因此,当输入超过 4 个字符(包括换行符)时,仅读取 4 个字符,其余字符保留在缓冲区中,准备下次 fgets 读取。

在这种情况下,您的 printf 将不会打印任何换行符,并且会被多次调用,使其看起来像打印超过 4 个字符。

按照评论中的建议,尝试 printf("[%s]", paragraph); 查看各个 printf 调用。

关于c - fgets 读取比应有的更多的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com