2014-10-29 4 views
1

다음 MPI 코드를 실행하려고합니다. 문제는 scanf입니다. 명령은 입력을 계속하고 어디에도 없습니다. 그것은 하나의 입력 문자열만을 취하기로되어 있습니다.OpenMPI C 언어 scanf가 입력을 중지하지 않습니다 (Mac OS X 10.10)

#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

플랫폼 : 맥 OS X 10.10

MPI 버전 : 오픈 MPI : 1.8.3

시스템 정보 : 애플 LLVM 버전 6.0 (그 소리-600.0.54) (LLVM의 3.5svn 기준) 대상 : x86_64에-사과 darwin14.0.0 스레드 모델 : POSIX

내가 잘못 어딘가에 나는 경우에 저를 수정하십시오.

+1

모든 문자열의 끝에서 널 문자'\ 0'을위한 장소를 남겨 두십시오 :'char string [length + 1];'동작을 변경합니까? 읽을 최대 글자 수를 지정할 수 있습니다 :'scanf ("% 10s", string); – francis

+0

은 @francis를 작동시키지 않았습니다. – harshitgupta

+1

"작동하지 않는"것은 무엇입니까? 변경 결과를 게시하십시오. 1)'char string [length + 1]; 2)'scanf ("% 10s", string); 또는 3) 둘 모두로 변경 했습니까? 둘 다 필요합니다. – chux

답변

1

stdin에서의 읽기는 일반적으로 모든 프로세스에 입력을 전달하는 복잡성 때문에 MPI 프로그램에서 권장하지 않습니다. 다른 구현 사이에서 이식 할 수있는 것이 아닙니다.

일반적으로 사람들이 응용 프로그램에 입력하는 방법은 입력 파일을 읽는 것입니다. 모든 곳에서 작동하며 모든 프로세스에서 파일을 사용할 수 있도록해야합니다.