gpt4 book ai didi

file - MPI fscanf() 返回假值

转载 作者:行者123 更新时间:2023-12-04 05:25:52 24 4
gpt4 key购买 nike

我的名为“a.txt”的文件包含一个数字( 47 )。

如果我使用 fscanf(a,"%f",&num) 在没有 MPI 的编译器上运行程序它给出了一个真值 nnum = 47 .

如果我使用 MPI ssh 运行程序,它不会返回正确的值。
它将返回 num = 1104187136 相反。

这是为什么?

int main(int argc, char *argv[]){
int count;
FILE *a1;
float a;
int num;

a1 = fopen("a1.txt","r");


MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numOfProc);
MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);

if(my_rank == 0){
fscanf(a1,"%f",&num);
a = num;
printf("a = %d",a);
}

MPI_Finalize();
}

最佳答案

我不认为这里的问题是 MPI,甚至 fscanf ;问题是 fscanf 的使用。如果您在打开警告的情况下编译,您将收到几个关于格式代码的警告。

首先,你有:

int num;
fscanf(a1,"%f",&num);

它尝试将数字作为浮点数读入,然后你给它一个指向 int 的指针来存储它。 printf/scanf 格式代码有点滑稽;它们不仅向 fscanf 指示如何解析输入,还指示以何种表示形式保存结果。如果您尝试将 47.0 的浮点表示复制到 int 变量中,您将得到:
int num;
float a;

a = 47.0;
*(float *)&num = a;

printf("num = %d\n", num);
...

num = 1111228416

printf 也会出现同样的问题:
a = num;
printf("a = %d",a);

在这里,您将 num 中的值分配给 a,这很好,编译器将在那里插入类型转换,但随后您将该值解释为 int 并将其打印出来,因此您会在那里得到另一个表示/值不匹配。

所以我认为在你的代码中你想要:
fscanf(a1,"%f",&a);
printf("a = %f",a);


fscanf(a1,"%d",&num);
printf("num = %d",num);

但不是您拥有它们的方式的转换。

关于file - MPI fscanf() 返回假值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com