• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:違いは何?)

getchar関数の違いとは?

このQ&Aのポイント
  • getcharとscanfを使った場合との違いを教えてください。
  • getcharとprintfを組み合わせた時の挙動の違いを説明してください。
  • getcharを使用する際の注意点について教えてください。

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

  • ベストアンサー
  • ency
  • ベストアンサー率39% (93/238)
回答No.4

No3 mac_resさんの回答のとおり、scanf() は空白や改行を食べ残します。 fgets() + sscanf() の組合せがポピュラーの対処方法ですが、食べ残しをさせないだけであれば、こんな方法もあります。 scanf( "%d%*c", &n ); 通常食べ残す改行文字を "%*c" の部分が吸い上げてくれます。

kk-ponpon
質問者

お礼

そんな方法があったんですか。試してみます。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

scanf(3)は、空白、改行、TABなどについて、ユーザーの予想外な結果を生じる関数です。対話入力に使用するのは、避けたほうが良い関数といえるでしょう。 #include <stdio.h> #include <stdlib.h> int getint(void) { char buf[BUFSIZ]; fgets(buf, BUFSIZ, stdin); return (atoi(buf)); } int main(void) { int i, n; printf("入力回数:"); n = getint(); for (i = 0; i < n; i++) { printf("#%d", i + 1); getchar(); } return 0; }

kk-ponpon
質問者

お礼

丁寧に書いてもらってありがとうございます。参考にさせていただきます。

すると、全ての回答が全文表示されます。
noname#16765
noname#16765
回答No.2

理由書いていなかったのですが、 scanfを使ったときにstdinバッファ内に改行文字が残ったりします。 そういった場合はこれらを使ったらいいのです。 厳密に言えば違うのですが「バッファの中に残っている文字を総て消す」みたいなものと思っていても問題はないと思います。

kk-ponpon
質問者

お礼

そうなんですか、参考にさせてもらいます。ありがとうございました。

すると、全ての回答が全文表示されます。
noname#16765
noname#16765
回答No.1

getchar(); の前に rewind(stdin); とか fflush(stdin); をつけてみたら?

すると、全ての回答が全文表示されます。

関連するQ&A