2013-04-13 64 views
7

scanf(「%d%c」,& size,& chara);工作,但單獨掃描字符輸入不起作用。我在代碼中顯示這些。這是爲什麼?爲什麼第二次scanf在我的程序中不起作用?

void squareCustomFill(int size, char chara); 

int main(void) { 

int size,i,k; 
char chara; 

printf("Enter size of square: "); //This works 
scanf("%d %c",&size,&chara); 

//printf("Enter fill character: ");  BUT WHY DOES NOT THIS WORK?? 
//scanf("%c",&chara); 

squareCustomFill(size,chara); 

return 0; 

} 

void squareCustomFill(int size, char chara){ 

int i,k; 

for (k=1;k<=size;k++){ 

    for(i=1;i<=size;i++) 
     printf("%c",chara); 
     printf("\n"); 

} 
} 

回答

9

Scanf沒有使用第一次scanf調用時留在緩衝區中的\n字符。

因此第二次scanf呼叫。

你必須先清除標準輸入前再閱讀或只是擺脫換行。

第二個電話應該是

scanf(" %c",&chara); 
    ^this space this will read whitespace charaters(what newline also is) until it finds a single char 
1

是的,我相信阿明是正確的。 scanf將讀取空格(空格鍵,換行符等)。如果您單擊空格鍵或在第一個scanf後輸入值,則輸入值時,第二個scanf將讀取該值(空格,換行符等)。所以你用scanf(「%d%c」,& size,& chara)修正了這個問題,因爲%d和%c之間有一個空格。如果你想讓它們分開,只需按照Armin的建議:scanf(「%c」,& chara)。

0

在它們之間拋出一個getchar(),並吸取無關的換行符。

相關問題