C 为什么程序只打印文件的最后一行,甚至在读取整个文件之后?
我想用C写一个程序,它只读取一个文件,将其存储到数组中,然后打印数组。一切正常,但当文本文件有多行时,我总是只打印最后一行 这是我的代码:C 为什么程序只打印文件的最后一行,甚至在读取整个文件之后?,c,file,file-handling,C,File,File Handling,我想用C写一个程序,它只读取一个文件,将其存储到数组中,然后打印数组。一切正常,但当文本文件有多行时,我总是只打印最后一行 这是我的代码: #include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) { FILE * stream; char dateiname[255]; stream = fopen("heute.txt", "r&q
#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);
#包括
#包括
int main(int argc,char*argv[]){
文件*流;
char dateiname[255];
stream=fopen(“heute.txt”,“r”);
if(流==NULL){
printf(“错误”);
}否则{
而(!feof(stream)){
fgets(dateiname,255,stream);
}
fclose(流);
}
printf(“%s\n”,日期名称);
}
谢谢你的帮助 如果您只想读取和打印文件的内容,则无需担心文件的大小以及文件中的行数 您只需运行
while
中的fgets()
,然后打印每一行,直到我们达到NULL
但是如果要存储它们,我们需要计算文件的大小。
因此,我们需要使用像stat
或fstat
这样的函数来获取文件的大小并动态分配内存,然后只读取
那么多字节
dateiname
将只读取最后一行
feof()
。有关更多信息,请参阅此链接:
#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;
}
#包括
#包括
int main()
{
文件*流;
char dateiname[1024];
int i=0;
stream=fopen(“heute.txt”,“r”);
if(流==NULL)
{
printf(“错误”);
}
其他的
{
while(fgets(dateiname,sizeof(dateiname),stream)!=NULL)
{
printf(“第%4d行:%s”,i,dateName);
i++;
}
}
返回0;
}
您只看到最后一项,因为您将所有数据读取到同一个变量中。每一行都替换上一行,当您到达末尾时,您将打印缓冲区中的内容。您可以移动
printf
,在读取时打印每一行。您还应该阅读以下内容:我建议您编写一些代码。或者使用实际的调试器单步执行代码。而(!feof)
始终是一个bug。搜索此网站为什么如此。你的作业或练习的目的是什么?只是为了将文件内容复制到控制台?存储数据并对其执行操作?还有别的吗?请将您的问题包含在作业或练习的全文中。功能stat
和fstat
不属于ISO C标准的一部分。它们是特定于平台的扩展。请注意,问题没有指定任何特定平台。据我所知,在ISO C中没有可靠的方法来确定文件大小。例如,使用fseek
转到文件末尾,然后使用ftell
将无法在所有平台上可靠工作,因为行尾标记在不同平台上的长度可能不同。例如,Windows使用的\r\n
被翻译为\n
。