OpenMPI C language scanf does not stop taking input (Mac OS X 10.10)

泄露秘密 提交于 2019-12-11 11:18:55

问题


I am trying to run the following MPI code. The problem is with the scanf. The command keep on taking input and does not anywhere. It is supposed to take one input string only.

#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;
}

Output:

Platform: Mac OS X 10.10

MPI Version : Open MPI: 1.8.3

System Info: Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.0.0 Thread model: posix

Please correct me if I am wrong somewhere.


回答1:


Reading from stdin is generally inadvisable in MPI programs due to the complexities of forwarding the input to all of the processes. It's not something that will be portable between different implementations.

Usually, the way people get input for their applications is to read input files. That works everywhere and all you have to do is make the file available at all processes.



来源:https://stackoverflow.com/questions/26636126/openmpi-c-language-scanf-does-not-stop-taking-input-mac-os-x-10-10

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!