9

次の C コード スニペットを検討してください。

#include <stdio.h>

int main()
{
    int a;
    char c;
    scanf("%d",&a);
    scanf("%c",&c);
    printf("int=%d\n",a);
    printf("char=%c\n",c);
}

文字ではなく整数のみを入力できます。出力は単に整数値であり、2 番目の printf ステートメントには値が出力されません。

ただし、フォーマット指定子の前にスペースを使用すると、次のようになります。

scanf(" %c",&c);

期待どおりに動作します。これはなぜですか?

入力バッファのクリアと関係があると誰かが私に言いました。誰かが同じことに光を当てることができますか?

4

3 に答える 3

2

数値を入力して ENTER を押した後、新しい行はバッファに残り、2 番目の行によって処理されるためscanfです。

つまり、新しい行を変数に保存しましたc

ただし、使用する場合

scanf(" %c",&c);
//     ^

スペースは新しい行を消費し、c期待した値になります。

于 2013-08-28T14:57:46.217 に答える
-1

フォーマット文字列で指定されたデータ オブジェクトへのポインタを渡す必要があるため、

scanf("%c", c);

c の値を実際に渡しますが、これはプログラムの障害を引き起こす可能性があります。

scanf("%c", &c);

は c のアドレスを渡し、scanf がコピーの値を変更できるようにします。

%c の後のスペースは、強制的に文字を検索し、次にスペースを検索します。スペースがないと文字が読めません

于 2013-08-28T14:59:49.387 に答える