OpenMPI C语言scanf不会停止输入(Mac OS X 10.10)

时间:2014-10-29 16:46:18

标签: c string scanf openmpi

我正在尝试运行以下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;
}

输出:

enter image description here

平台: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

如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

由于将输入转发到所有进程的复杂性,因此在MPI程序中从stdin读取通常是不可取的。它不是可以在不同实现之间移植的东西。

通常,人们为其应用程序输入的方式是读取输入文件。这在任何地方都有效,您所要做的就是在所有流程中使文件可用。