4

Windowsでは、

char c;
int i;

scanf("%d", &i);
scanf("%c", &c);

'\ n'がバッファに残っているため、コンピュータはコンソールからの文字の取得をスキップします。ただし、以下のコードが適切に機能することがわかりました。

char str[10];
int i;

scanf("%d", &i);
scanf("%s", str);

上記の場合と同様に、「\ n」はバッファに残っていますが、scanfが今回コンソールから文字列を正常に取得するのはなぜですか?

4

2 に答える 2

7

gccのマニュアルページから(私はWindowsを手元に持っていません):

%c:常に固定数の文字に一致します。最大フィールド幅は、読み取る文字数を示します。最大値を指定しない場合、デフォルトは1です。また、最初の空白文字をスキップしません。

%s:空白以外の文字の文字列に一致します。最初の空白をスキップして破棄しますが、何かを読んだ後、さらに空白に遭遇すると停止します。 [この句は、あなたが見ている振る舞いを説明するはずです。]

于 2010-01-18T12:07:23.427 に答える
2

質問を理解するのに問題がありますが、scanfはすべての空白文字を無視します。n空白文字です。ユーザーがEnterキーを押したときを検出する場合は、fgetsを使用する必要があります。

fgets(str, 10, stdin);
于 2010-01-18T12:05:58.023 に答える