2012-09-27 76 views
0
while((player1chip==-1)||(player2chip==-1)||(player3chip==-1)){                
    player1chip=-1; player2chip=-1; player3chip=-1;              
    printf("How many chips would you like to play with (3-10):\n"); 
    scanf("%d%d%d", &player1chip, &player2chip, &player3chip); 
    getchar(); 
} 

我想一次獲得3個值,但循環似乎已經運行了3次... 我應該怎麼做?如何在while循環中掃描多個輸入?

+2

循環應該執行一次並提示你三個輸入,如果你所有的輸入都不是-1,那麼它應該退出。你看到什麼行爲? – Jay

+0

「我想一次獲得3個值,但循環似乎已經運行了3次」。這聽起來像是你只想得到3個值1次?你能多解釋一下嗎? – Nocturno

+0

請注意,'scanf()'只有在讀取了三個整數(不一定全部在同一行)或直到它失敗(例如因爲遇到字母字符)之後纔會返回。你應該檢查你從'scanf()'返回3;如果你有另一個價值,那就是一個問題。 'getchar()'將讀取'scanf()'留下的任何字符(例如換行符)。 –

回答

0
int p1chip=-1, p2chip=-1, p3chip=-1; 
do { 
    printf("How many chips would you like to play with (3-10)?\n"); 
    scanf("%d%d%d", &p1chip, &p2chip, &p3chip); 
} while ((p1chip == -1) || (p2chip == -1) || (p3chip == -1)) 

試試看。

+1

可以通過多種方法重新編寫代碼以滿足此方案。但是,爲什麼用戶發佈的代碼沒有按預期發佈?答案應該鑽研這方面。 – Jay

0

scanf()語句對於您正在嘗試執行的操作有點奇怪,因爲您在使用「%d%d%d」表示期待三個數字沒有分隔。如果while循環的目的是爲了填補playerchip變量,你應該使用數組爲他們和遍歷數組,像這樣:

playerchip[3]; 
for(int i=0; i<3; i++) { 
    printf("How many chips would player %d like to play with (3-10)?:\n", i); 
    scanf("%d", &playerchip[i]); 
} 

如果你保留你的命名方案,您不能使用循環來輕鬆填充變量。爲了雖然回答你原來的問題,在一次搶多個號碼,你需要有一些分離器在你的scanf()語句:

scanf("%d %d %d", &a, &b, &c); 

當一個數字結束和另一個開始,每個人都這樣,知道了。