【发布时间】:2013-12-03 01:17:21
【问题描述】:
我正在使用 C 语言并有一个 617kb 的文本文件,我正在尝试使用 fgetc 读取它。出于某种原因,fgetc 在文件中随机启动。我尝试移动文件指针以从fseek 开始,但没有成功。我可以让fgetc 处理较小的文件。任何帮助表示赞赏。
示例输入是 25,000 行数据,类似于:
Product
23 660
2366 3
237 09
2 3730
23734
23 773
241 46
来源:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print(FILE *category){
int ch = 'a';
while ((ch = fgetc(category)) != EOF){
printf("%c", ch);
}
getchar();
}
int main(void){
FILE *category = fopen("myFile", "r");
if (category == NULL){
puts("category file not found");
}
else{
print(category);
fclose(category);
return 0;
}
}
【问题讨论】:
-
什么告诉你从文件中间开始阅读?你输出窗口截断吗?我会修改代码以在 100 个字符左右后停止写入,只是为了查看当前输出是否滚出屏幕。
-
… 或者更好,将输出写入另一个文件而不是屏幕。这可以在根本不修改程序的情况下完成。
-
@Prashant 您的编辑带走了信息。尽管您的编辑很好地格式化了帖子,但 OP 的“Product\n 23 660\n 2366 3\n 237 09\n 2 3730\n 23734\n 23 773\n 241 46\n”明确显示了合并的行尾。这与您的编辑不同。
-
是的,我删除了
\ns。在我的辩护中,我复制了示例文件(在剥离\ns 之后)和我的计算机上的源代码并运行它。不幸的是,我无法重现问题中的错误,因为它从顶部开始正确打印出整个文件。刚刚用\ns 再次尝试,对我来说同样(正确)的行为。 -
@user3023963 您的文件中有明确的
\ns 吗?还是您只是在指示新行?也许我太大胆地假设你只是指一个新行。