1

私はこの構文と混同しています。最初は本の印刷ミスかと思いました。しかし、かなり長い間プログラミングをしているうちに、それらが異なる意味を持っていることを知りました。それでも、その構文について明確なビジョンを得ることができません。

同様に、次の違いは何ですか:

gets( str);gets(str);

空白は重要ですか?はいの場合、どのように?

4

4 に答える 4

5

scanfフォーマット文字列にスペースを追加するときは、scanf空白を読み取ってスキップするように指示します。たとえば、入力の改行をスキップすると便利です。また、フォーマットによっては空白を自動的にスキップすることにも注意してください。

関数のファミリの良いリファレンスについては、たとえばここを参照してください。scanf


の違い

gets(str);

gets( str );

全くありません。文字列リテラル以外の実際のコードは、任意の量の空白でフォーマットできます。上記の呼び出しを次のように書くこともできます

gets
    (
        str
    )
;

それは今でも同じだろう。

ああ、このgets関数はずっと前から廃止されており、最新の C 標準からも削除されています。fgets代わりに使用する必要があります。

于 2013-11-12T07:36:36.387 に答える
2

フォーマット文字列内の空白 (空白、タブ、改行など) は、入力内のnoneを含む任意の量の空白と一致します。

http://www.manpagez.com/man/3/scanf/

スペースではgets何の意味もありません。コンパイル時には無視されます。

于 2013-11-12T07:37:02.083 に答える
0

ここで scanf について学ぶべき重要なことが 2 つあります。

  1. %c と %[ を除くすべての変換修飾子は、スキャンされた項目の前の空白を無視します。
  2. 次のように、すべての空白を無視するこの動作を明示的に呼び出すことができます。

    scanf(" %c", &mychar)

    scanf("\n%c", &mychar)

    scanf("\t%c", &mychar)

つまり、変換文字列内の空白文字 (スペースを含む) は、スキャンされた項目までのすべての空白を無視するように scanf に指示します。

%c と %[ を除くすべての変換修飾子はこれを自動的に行うため、 vs に関する最初の質問に対する答えscanf("%s")scanf(" %s")、違いはないということです。

C FAQ の scanf に関する質問をすべて読み、すべてをよりよく理解するためにいくつかのテスト プログラムを作成することをお勧めします。

http://c-faq.com/stdio/scanfprobs.html

于 2014-01-09T22:06:00.707 に答える