的openmpi C语言的scanf不会停止服用输入键(Mac OS X 10.10)(OpenMP

2019-10-21 04:57发布

我试图运行下面的代码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

系统信息:苹果LLVM 6.0版(铛- 600.0.54)(基于LLVM 3.5svn)目标:x86_64的-苹果darwin14.0.0线程模型:POSIX

如果我错了地方请指正。

Answer 1:

从读stdin是由于转发输入到所有进程中的复杂MPI程序一般不可取的。 这不是,这将是不同的实现之间移植。

通常,人们得到的方式为他们的应用程序输入读取输入文件。 该工程无处不在,所有你需要做的就是使文件可在所有进程。



文章来源: OpenMPI C language scanf does not stop taking input (Mac OS X 10.10)