c - 为什么程序只打印文件的最后一行,即使在读取了整个文件之后?
问题描述
我想用 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);
}
感谢帮助!
解决方案
-
一切正常,但是当文本文件不止一行时,我总是只打印最后一行
原因:对于每次迭代,数据都被下一行数据替换,最后dateiname
将只读取最后一行。
-
而(!feof(流))
feof()
不推荐使用。请参阅此链接了解更多信息:https ://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284351&answer=1046476070
请看以下代码:
#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; }
推荐阅读
- azure-data-factory - 比较表大小以在 Azure 数据工厂中触发管道
- javascript - Javascript比较子字符串长度返回错误结果
- python - SQL & Pandas 效率
- ruby - Ruby TypeError:没有将字符串隐式转换为整数
- javascript - 强制表格布局
- c# - 模型未绑定到 ViewModel ASP.Net MVC
- swift - 关于 swift 中的可选链接的一个小问题
- vue.js - 可以在 forEach 循环中通过 Axios 可靠地发送多个 post 请求吗?
- mysql - 我在一周中的某一天收到 1-7 的 int,我需要将它与 7 个工作日列进行比较?
- angular - Angular + .net Core 3 + Azure App Service - 仅在特定路由上允许 HTTP?