读取.txt文件C时重复最后一个字符串

读取.txt文件C时重复最后一个字符串,c,C,这是代码,它从一个文件中读取,然后打印该文件中写入的内容。 我不知道为什么,但文件的最后一个字符串被读取了两次 代码 这是输出: 日期:2017年2月7日星期二21:32:46+0100(CET) 发件人:租金 致:我 消息ID:message2 主题:帕加·阿尔基勒·亚。 亲爱的客户:, 您的付款延迟,请付款或离开! 诚挚的, 房屋租金 房屋租金 我能做些什么来解决这个问题?谢谢。printf(“%s”,buff\u src)正在打印最后一行。在执行while循环后,您还有一个对printf

这是代码,它从一个文件中读取,然后打印该文件中写入的内容。 我不知道为什么,但文件的最后一个字符串被读取了两次

代码

这是输出:

日期:2017年2月7日星期二21:32:46+0100(CET)
发件人:租金
致:我
消息ID:message2
主题:帕加·阿尔基勒·亚。
亲爱的客户:,
您的付款延迟,请付款或离开!
诚挚的,
房屋租金
房屋租金

我能做些什么来解决这个问题?谢谢。

printf(“%s”,buff\u src)
正在打印最后一行。

在执行
while
循环后,您还有一个对
printf()
的额外调用:

while(fgets(buff_src, sizeof(buff_src), src) != NULL)
{
    fputs(buff_src, stdout); // prints each line
}
fclose(src);
printf("%s", buff_src); // prints buff_src which still holds the last line
只要删除对
printf()
的这个不必要的调用,它就会像您期望的那样工作。

fgets()
逐行读取文件。从
fgets()的手册页

如果新行被读取,它将被存储到缓冲区中


当循环失败时,使用最后一个
printf
语句打印的
buff\u src
包含的内容。

使用调试器单步执行程序将快速显示问题所在。为什么代码包含
printf(“%s”,buff\u src))
Date: Tue, 07 Feb 2017 21:32:46 +0100 (CET)
From: Rental <rental@house-rental.com>
To: me <me@upf.edu>
Message-ID: message2
Subject: Paga el alquiler ya.

Dear customer,

you are late in your payment, please pay or LEAVE!

Sincerely yours,
House rental
House rental
while(fgets(buff_src, sizeof(buff_src), src) != NULL)
{
    fputs(buff_src, stdout); // prints each line
}
fclose(src);
printf("%s", buff_src); // prints buff_src which still holds the last line
fgets(buff_src, sizeof(buff_src), src) /* read upto New line or EOF from src and store into buff_src */