0

scanf を実行した後、printf の出力が「\n」によって破壊されています。使おうとしています。

scanf ("%*c");

「\ n」をむさぼり食うが、うまくいかない...コードは次のとおりです

    printf("Enter char float int char:", char4, deci2, num2, char5);
    scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
    scanf ("%*c");
    printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );

そしてそれはに出力します

    Enter char int char float:a 5 a 5.5
    You entered: 'a' 5 'a' 5.500 
    Enter char float int char:a 5.5 6 b
    You entered: '
    ' 0.000 0 ''
4

3 に答える 3

3

この線

scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);

前回の呼び出しから入力バッファに残った漂遊改行を拾っていscanfます。最初の の前にスペースを置くことで、これを回避できます%c

scanf (" %c %f %d %c", &char4, &deci2, &num2, &char5);

これによりscanf、次の非空白文字を読み取る前に、先頭の空白 (空白、改行、タブなど) をスキップするように指示されます。

この線

printf("Enter char float int char:", char4, deci2, num2, char5);

少し頭を悩ませています。問題は発生しません (余分な引数は評価されますが、それ以外は無視されます)。

于 2013-01-25T22:07:23.770 に答える
3

この行で:

printf("Enter char float int char:", char4, deci2, num2, char5);

char4deci2num2、および を削除しchar5ます。Carl Norum が示唆するようにまだ問題が発生している場合は、最初の scanf から残った改行文字を次のように消費してみてください。

scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
getchar();
printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );
于 2013-01-25T21:55:46.477 に答える
2

まだぶらぶらしているのは、最初の\n読み取りからのバッファーに残っているものです。後ではなく、2番目を行う前にそれを食べる必要があります. scanf

編集者注: サブセットだけではなく、関連するすべてのコードを質問に含める必要があります。あなたが提供した出力から、これがあなたの問題であるとしか推測できませんでした。Enter char int char floatサンプルコードには存在しない文字列が含まれています。

于 2013-01-25T21:58:14.927 に答える