打印2D矩阵文件,在MPI c程序中获取错误数据

打印2D矩阵文件,在MPI c程序中获取错误数据,c,file-io,matrix,mpi,C,File Io,Matrix,Mpi,实际文件: 猫试验 4 9 8 3 5 6 2 4 5 3 1 0 5 7 4 2 1 7 4 5 9 3 2 0 3 9 1 0 5 2 251061 总的来说,这是一个MPI C项目。谁能帮我一下,告诉我哪里出了问题 解决方案:读取是二进制操作,不读取文本文件。尝试读取二进制文件时,问题已解决。谢谢大家的帮助。问题可能是ASCII文本被生成为输入…并读取二进制数据 如前所述,流级I/O更灵活,通常更方便;因此,程序员通常仅在必要时使用描述符级函数 您可以切换到stdio.h。open变为fo

实际文件: 猫试验 4 9 8 3 5 6 2 4 5 3 1 0 5 7 4 2 1 7 4 5 9 3 2 0 3 9 1 0 5 2 251061

总的来说,这是一个MPI C项目。谁能帮我一下,告诉我哪里出了问题


解决方案:读取是二进制操作,不读取文本文件。尝试读取二进制文件时,问题已解决。谢谢大家的帮助。

问题可能是ASCII文本被生成为输入…并读取二进制数据

如前所述,流级I/O更灵活,通常更方便;因此,程序员通常仅在必要时使用描述符级函数


您可以切换到stdio.h。open变为fopen,lseek变为fseek。如果您的输入是ASCII,可能是fscanfpFile,%d,&InputBuffer[index][i];会成功的。

谢谢您的回复@HighPerformanceMark。实际上,文件将在命令行中给出,所以不确定格式,但我肯定会尝试格式化它..谢谢4建议。我试着用包含整数的文件打印,比如:cat test 4 9 8 3 5 6 2 4 5 3 1 0 5 7 4 2 1 7 4 5 9 3 0 3 9 1 0 5 2 5 1 0 6 1问题可能是ASCII文本被生成为输入…并读取二进制数据。如前所述,流级I/O更灵活,通常更方便;因此,程序员通常仅在必要时使用描述符级函数。您可以切换到stdio.h。open变为fopen,lseek变为fseek。如果您的输入是ASCII,可能是fscanfpFile,%d,&InputBuffer[index][i];很好,谢谢你,弗朗西斯。这很有帮助。现在我可以打印二进制文件了。非常感谢您的回复。如果您认为@francis建议的解决方案是您问题的答案,请将其作为答案发布。这样,您可以在适当的时间间隔后接受答案,此问题将不再出现在未回答的问题列表中。
int fh = open (filename, O_RDONLY);
int **InputBuffer;
InputBuffer = (int **)malloc(rowLocal * sizeof(int));
for (i = 0; i < rowLocal; i++)
{
    InputBuffer[i] = (int*)malloc(clmLocal * sizeof(int));
}
lseek(fh, rowLocal * clmLocal * sizeof(int) * MyRank,SEEK_SET);
for (index = 0; index < rowLocal; index++)
{
    for (i = 0; i < clmLocal; i++)
    {
        int readchk = read (fh,&(InputBuffer[index][i]),sizeof(int));
    }
}

for (index = 0; index < rowLocal; index++)
{
    for (i = 0; i < clmLocal; i++)
    {
        printf(" %d \t",InputBuffer[index][i]);
    }
}