2013-04-13 15 views
7

scanf( "%d%c"、&サイズ、& chara)。文字入力のための別のscanfは機能しません。私はこれらをコードの中に示します。何故ですか?なぜ私のプログラムで第2の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文字を消費しませんでした。

したがって、2回目のscanf呼び出しが実行されました。

もう一度読む前に標準入力をクリアするか、改行を取り除くだけです。

2番目の呼び出しは

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

はい、私はアーミンが正しいと信じていなければなりません。 scanfは空白(スペースバー、改行など)を読み込みます。スペースバーをクリックするか、最初のscanfの直後に入力すると値を入力すると、2番目のscanfはその値(スペース、改行など)を読み込みます。したがって、%dと%cの間にスペースがあるため、scanf( "%d%c"、&サイズ、& chara)で修正しました。それらを分けたい場合は、Arminが提案したものを実行してください:scanf( "%c"、& chara)。

0

getchar()をそれらの間に入れて、無関係な改行をスローします。

関連する問題