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;
}
輸出:
平臺: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
請糾正我,如果我錯了地方。
給所有字符串末尾的空字符'\ 0'留下一些位置:'char string [length + 1];'它會改變行爲嗎?您可以指定要讀取的最大字符數:'scanf(「%10s」,字符串);' – francis 2014-10-29 17:25:16
不能工作@francis。 – harshitgupta 2014-10-29 17:50:45
什麼「不起作用」?發佈更改的結果。你1)更改爲'字符串[長度+ 1];'2)更改爲'scanf(「%10s」,字符串);'或3)兩者?你需要兩個。 – chux 2014-10-29 19:17:11