我有一个在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个元素为实际大小的一半。
答案 0 :(得分:1)
您的文件包含ascii中的数字,您无法将文件的大小与基于sizeof(int)
的内容进行比较
fseek(fp, 0, SEEK_END);
n = ftell(fp);
n /= sizeof(int);
不给您文件中的数字数量