0

今日、scanf() を使ったプログラムを書きました。プログラムは正しかったのですが、デバッグすると、Enter キーを押してもプログラムが入力を待っていて、別の数字/文字を押してからもう一度 Enter キーを押すまで結果が表示されませんでした。その瞬間、入力の計算値が表示されました。コードを調べたところ、書式指定子の後にスペースを入れていたことがわかりました。スペースを削除すると、うまくいきました。

 `scanf("%d ",&a);`

この動作の理由は何ですか?

4

2 に答える 2

2

あなたの質問への答えは、フォーマット指定子 (空白セクション) の説明にあります: http://www.cplusplus.com/reference/cstdio/scanf/

この関数は、次の非空白文字の前にある空白文字を読み取って無視します (空白文字には、スペース、改行、およびタブ文字が含まれます。isspace を参照してください)。フォーマット文字列内の単一の空白は、ストリームから抽出された任意の数の空白文字 (ゼロを含む) を検証します。

于 2013-09-19T19:26:02.103 に答える
2

I/O はバッファリングされており、フラッシュする必要があります。

<stdio.h>呼び出しなどでfflush(NULL)またはfflush(stdout)fflush(3)および関連する man ページを読んでください。

C++ iostream では or を実行しますcout << std::flush(cout.flush または、jodagによってコメントされているように、改行を出力してからフラッシュする aを実行cout << std::endlします)。std::flushなどについて読んでください。

またscanf("%d ",&a)、リーダーは数字の直後に数字以外の文字を取得する必要があります(おそらくスペース、または行末またはファイルの終わりを取得します)。scanf(3)の man ページを読んでください。

あなたの前にstdoutをフラッシュすることをお勧めしますscanf(常にではありませんが、自動的に行われる場合があります)

ところで、数値を入力する好ましい C++ の方法はおそらく

 std::cin >> a;
于 2013-09-19T19:21:10.953 に答える