我正在尝试运行以下MPI代码。问题在于scanf
。该命令继续接受输入,而不是任何地方。它应该只接受一个输入字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mpi.h>
int main(int argc,char * argv[])
{
int npes, myrank, length = 10;
char string[length+1]; // array size changed to length +1 as suggested in comments.
memset(string, 0, length+1);
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &npes);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
if (myrank == 0) {
printf("Please enter the string of length %d or enter 0 to generate string randomly:\n", length);
scanf ("%10s", string); // format changed as suggested in comments
printf("%s\n", string);
}
MPI_Finalize();
return 0;
}
输出:
平台:Mac OS X 10.10
MPI版本:打开MPI:1.8.3
系统信息 Apple LLVM 6.0版(clang-600.0.54)(基于LLVM 3.5svn) 目标:x86_64-apple-darwin14.0.0 线程模型:posix
如果我错了,请纠正我。
答案 0 :(得分:1)
由于将输入转发到所有进程的复杂性,因此在MPI程序中从stdin
读取通常是不可取的。它不是可以在不同实现之间移植的东西。
通常,人们为其应用程序输入的方式是读取输入文件。这在任何地方都有效,您所要做的就是在所有流程中使文件可用。