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");

 }
}
4

3 に答える 3

9

Scanf は\n、最初の scanf 呼び出しからバッファに残っていた文字を消費しませんでした。

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

再度読み取る前に標準入力をクリアするか、改行を取り除く必要があります。

2番目の呼び出しは

scanf(" %c",&chara);
       ^ this space this will read whitespace charaters( what newline also is) until it finds a single char
于 2013-04-13T22:56:07.580 に答える
1

はい、アルミンが正しいと思います。scanf は空白 (スペースバー、改行など) を読み取ります。スペースバーをクリックするか、最初の scanf の直後に入力して値を入力すると、2 番目の scanf がその値 (スペース、改行など) を読み取ります。%d と %c の間にスペースがあるため、scanf("%d %c",&size,&chara) で修正しました。それらを分離したい場合は、Arminが提案したことを実行してください: scanf(" %c",&chara).

于 2013-04-13T23:06:41.010 に答える
0

それらの間にgetchar()を投げて、無関係な改行を丸呑みします。

于 2015-11-24T05:35:19.323 に答える