• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:scanfの\nの意味)

scanfの の意味

このQ&Aのポイント
  • scanfの\nの意味とは、入力バッファに残っている改行文字を読み飛ばすための記号です。
  • 入力バッファには、scanfの前の入力などで残っている改行文字やスペースなどが含まれる場合があります。
  • \nを使用することで、改行文字を読み飛ばして指定した変数に値を取得することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

https://www.sejuku.net/blog/24965#i-5 が参考になるかと。 要するに、 ・一回目のscanf()に入力した後には、最後の改行コード(<enter>したというコード)が  まだバッファに残っている ・2回目のscanf()では、上記の通りバッファの頭に改行コードが残っているけど、  "%d"や"%s"であればそれを自動的に読み飛ばしてくれている ・3回目のscanf()でも同様に、2回目に入力した最後の改行コードが  バッファの頭に残っているが、scanf("%c",...);だとそれをそのまま読み込むので    入力した'M'でなく、 バッファに残った' \n'を ..genderに入れてしまう。 このため、2回目以降でscanf("%c", ...)とする場合は、   "%c"でなく、 "\n%c" とか、"%*c%c" とやって、 バッファに残っている前回の改行コードを 読み飛ばしてやる必要がある。 っ感じです。

hirapiro
質問者

お礼

なるほど!理解できました! そこで、%d、%sなら読み飛ばす、%cは読み飛ばさない、というのが仕様ということですね。 よくわかりました、ありがとうございます!!

その他の回答 (2)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

> \nがあると、改行を読み飛ばすということですが、 > gender=M > には改行が含まれていないと思うのですが? そこじゃなく一つ前の %d で 11<enter> って入力する想定なんでしょう? その <enter> が次の %c に入ってきてる。 > そして、なぜnameには改行が含まれていないのでしょうか? %c と %s の処理の違い。簡単に言えば %c は文字種を問わず次の一文字、%s は前後のホワイトスペーススキップして一単語、詳しくは scanf() の仕様を確認

hirapiro
質問者

お礼

すいません、さっぱりわからないです・・・ 入力に<enter>が含まれているというのはご指摘で理解しましたが、それが%c、%d、%sでどう処理され、どう違うのかがわからないです。 仕様をネットで検索しても、これについての記述を見つけることができるませんでした。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

/nは改行。 scanf("\n%c",&person1.gender);だと最初の改行文字は読み飛ばしますが scanf("%c",&person1.gender);だと改行文字が読み込まれてしまいます。

hirapiro
質問者

お礼

ご回答ありがとうございます。 \nがあると、改行を読み飛ばすということですが、 gender=M には改行が含まれていないと思うのですが? そして、なぜnameには改行が含まれていないのでしょうか?

関連するQ&A