首页 > 解决方案 > 为什么程序只打印文件的最后一行,即使在读取了整个文件之后?

问题描述

我想用 C 编写一个程序,它只读取一个文件,将其存储到一个数组中,然后打印该数组。一切正常,但是当文本文件超过一行时,我总是只打印最后一行。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[]) {
   FILE * stream;
   char dateiname[255];
   stream = fopen("heute.txt", "r");

   if(stream == NULL){
      printf("Error");
      }else {
          while(!feof(stream)){
             fgets(dateiname, 255, stream);
      }
    fclose(stream);
    }

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

}

感谢帮助!

标签: cfilefile-handling

解决方案


  1. 一切正常,但是当文本文件不止一行时,我总是只打印最后一行

原因:对于每次迭代,数据都被下一行数据替换,最后dateiname将只读取最后一行。

  1. 而(!feof(流))

feof()不推荐使用。请参阅此链接了解更多信息:https ://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284351&answer=1046476070

  1. 请看以下代码:

     #include <stdio.h>
     #include <stdlib.h>
    
     int main()
     {
       FILE *stream;
       char dateiname[1024];
       int i = 0;
       stream = fopen("heute.txt", "r");
    
        if (stream == NULL)
        {
           printf("Error");
        }
        else
        {
            while (fgets(dateiname, sizeof(dateiname), stream) != NULL)
            {
               printf("Line %4d: %s", i, dateiname);
               i++;
            } 
        }
    
     return 0;
    }
    

推荐阅读