gpt4 book ai didi

c - 读取文本文件时出错;行读取两次并且彼此有额外的换行符

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:53 25 4
gpt4 key购买 nike

我正在读取一个文本文件(在 UNIX 或 Linux 机器上编写),该文件应该每行有一个条目。当我用我的程序读取它并将文件内容输出到控制台时,每个其他条目都有一个额外的换行符并且每行重复两次。这是代码

FILE* fullList;
char sline[21];
fullList = fopen("fullList", "r");
if(fullList == NULL)
exit(EXIT_FAILURE);
while(fgets(sline, sizeof(sline), fullList) != NULL)
{
puts(sline);
printf(sline);
}
fclose(fullList);

所以如果输入文件包含

apple
banana
orange
zucchini
cucumber
eggplant

程序会将其显示为

apple

apple
banana

banana
orange

orange
zucchini

zucchini
cucumber

cucumber
eggplant
eggplant

我不确定它在做什么。在再次使用它之前,我必须对 sline 进行一些清理吗?

最佳答案

那是因为您将每行打印两次 - 一次通过 puts,一次通过 printf。

fgets 捕获换行符 \n,而 puts 附加一个它自己的 '\n',所以在第一个打印输出后有一个额外的换行符。

文件中的最后一行 ("eggplant") 缺少结尾的 '\n',因此两个茄子打印输出之间没有多余的空行。

要解决这个问题,首先停止调用其中一个打印函数。接下来,确保您阅读的行末尾没有 \n。您可以自己将其剥离,也可以使用

while (fscanf(fulllist, "%20s", sline) == 1) {
...
}

不建议在形式参数处使用您的字符串调用 printf,因为那里有意外的格式符号可能会导致未定义的行为。如果您决定使用 printf,请按如下方式使用它:

printf("%s\n", sline);

关于c - 读取文本文件时出错;行读取两次并且彼此有额外的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062509/

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