无法从C中的txt文件读取所有数字

时间:2019-01-13 17:02:46

标签: c file numbers

我有一个在MPI中运行的程序。尽管实际的问题只是程序的一部分,其中处理器0从txt文件读取一些数字到一个动态数组中。为了确定我已扫描到文件末尾,我使用文件指针并将结果除以4(这是每个int所需的字节数),并且应具有正确的大小来分配内存。问题是,它无法按预期工作,并且最终只有一半大小,因此我将读取一半文件,并且程序将不正确。

我试图格式化文件中的数字,或者假设这是一个本质问题,但是什么也没有。

我的Data.txt: 1 2 3 4 5 6 7 8 9 10 11 12

从文件读取的代码部分:

           fp = fopen("Data.txt", "r");
           if (fp == NULL) {
                fprintf(stderr, "Error while opening file.\n");
                MPI_Abort(newComm, 2);
            }

            fseek(fp, 0, SEEK_END);
            n = ftell(fp);
            n /= sizeof(int);
            printf("n = %d\n", n);
            fseek(fp, 0, SEEK_SET);

            workLoad = n / p;

            if (n % p != 0) {
                fprintf(stderr, "The number of elements in the file MOD the number of proccessors must equal zero.\n");
                MPI_Abort(newComm, 2);
            }

            arr = (int*)malloc(n * sizeof(int));
            if (arr == NULL) {
                fprintf(stderr, "Error in malloc!\n");
                MPI_Abort(newComm, 1);
            }

            for (i = 0; i < n; i++)
                fscanf(fp, "%d", arr + i);

            fclose(fp);

            printf("Numbers loaded from file.\n");
            break;

预期输出应为包含12个元素(例如文件编号)的数组。

实际输出是一个包含6个元素的数组,直到第6个元素为实际大小的一半。

1 个答案:

答案 0 :(得分:1)

您的文件包含ascii中的数字,您无法将文件的大小与基于sizeof(int)的内容进行比较

       fseek(fp, 0, SEEK_END);
        n = ftell(fp);
        n /= sizeof(int);

不给您文件中的数字数量