0

タイトル通り、使おうかな

while(getchar() != '\n'); 

scanf を使用するたびに? そして、誰かが背後にあるロジックを説明できますか

while(getchar() != '\n');

ありがとう。

4

1 に答える 1

6

いいえ、通常はその必要はありません。stdin投稿したループは、そうでない文字に遭遇するまで文字を読み取ります\n。あなたが書いた方法では、最後の非改行文字は改行と同じように失われます。

典型的な問題または「フラッシュ」の必要性は、次の方法で回避できます。

  • scanf他の入力方法と混在しない。たとえば、それを混ぜないでくださいfgets
  • スペースが無視されず、無視したい場合に、フォーマット指定子の前にスペースを入れる

たとえば、空白を無視するにはscanf("%c"...)scanf(" %c"..).


それはさておき、読み込む入力が複雑な場合は、次のことをお勧めします。

  • で文字列全体を読み取り、それを で好きなようにfgets解析できます。矛盾しているように見えるかもしれません。ポイントは、 を使用して完全な文字列を安全に保存すると、それを分析したり、一致しない部分をスローしたり、あちこちで実行したりする自由が大幅に増えることです。sscanfstrtoksscanfscanffgetsstrchr

  • タスクをより単純な問題に減らすために、python や perl など、ジョブにより適した言語 (ライブラリ付き) を使用します。

  • 本格的なレクサーを使用する

于 2013-02-28T22:16:30.560 に答える