【问题标题】:fgetc not starting at beginning of large txt filefgetc 没有从大 txt 文件的开头开始
【发布时间】: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 吗?还是您只是在指示新行?也许我太大胆地假设你只是指一个新行。

标签: c fgetc


【解决方案1】:

我怀疑问题出在其他地方。

这个程序的输出去哪里了?如果您将它发送到控制台,它的回滚缓冲区将不足以容纳整个文件。也许它只是看起来就像fgetc() 是从一个奇怪的地方开始的。

尝试将这个程序的输出转移到一个新的文本文件,并将这个文件的大小与输入文件的大小进行比较,例如:

./category_print >output.txt

【讨论】:

  • 这行得通,谢谢。我刚刚打印到另一个文件,它从头开始。
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多