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

时间:2018-02-05 17:22:58

标签: c

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

  

代码

FILE* src = fopen(name_email_src, "r");
if (src == NULL)
{
    printf("ERROR source file not found");
}
while(fgets(buff_src, sizeof(buff_src), src) != NULL)
{
    fputs(buff_src, stdout);
}
fclose(src);
printf("%s", buff_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

我该怎么做才能解决这个问题?谢谢。

3 个答案:

答案 0 :(得分:2)

printf("%s", buff_src);正在打印最后一行。

答案 1 :(得分:0)

printf()循环后,您需要额外拨打while

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()的不必要的调用,它就会按预期运行。

答案 2 :(得分:0)

fgets()从文件中逐行读取。来自fgets()

的手册页

如果读取换行符,则将其存储到缓冲区中。

fgets(buff_src, sizeof(buff_src), src) /* read upto New line or EOF from src and store into buff_src */

当循环失败时buff_src包含使用上一个printf语句打印的内容。