2016-01-18 52 views
0

對於一個任務,我必須做一個quoridor遊戲,遊戲必須與一個用python編寫的裁判進行通信,這樣兩個quoridor客戶端可以相互對抗,出於某種原因, C程序蟒蛇實例不接收,或者我的C程序不會從Python裁判通過scanf函數得到了什麼Python程序沒有收到printf的輸出

我跑的裁判就是這樣

./referee.py --black ./quoridor --white ./quoridor 

的第一個命令,它的方式發送給./quoridor的命令是「name」,並且quoridor必須使用它的名稱進行響應,如果我運行./quoridor並鍵入它的名稱只要找到,它就會以名稱作出迴應。但那不是裁判的情況。

char command[MAX_COM_SIZE]; 
scanf("%s",command); 
if(strcmpIgnoreCase(command,"name")==0){ 
    printf("= Athinaios\n\n"); 
} 

教授爲我提供與工作得很好,並從終端的行爲完全以同樣的方式牆棋的二進制礦山

+3

緩衝也許?嘗試'fflush(stdout)'。 – kfx

+3

如果你刷新標準輸出會發生什麼? http://stackoverflow.com/q/1716296/748858 – mgilson

+0

@ kfx,該死的它我正在燃燒腦細胞2小時,現在試圖找出它,這是這個!看起來像是一個常見的坑坑窪坑,可能已經被淹沒了,我應該刪除這個問題還是會發佈一個正式的awnser? – SteveL

回答

2

printf()調用代碼中的正確放格式化字符串標準輸出。然而,問題是C標準庫文件描述符被緩衝,所以直到緩衝區已滿或顯式刷新後纔會顯示輸出。

爲了刷新輸出,使用fflush

printf("= Athinaios\n\n"); 
fflush(stdout); 

或者,在開始禁用緩衝:

setbuf(stdout, NULL); 
1

沒有理由這樣做緩衝I/O在這種情況。我會用寫電話。