• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語についての質問です。)

なぜC言語でintではなくcharを使うべきなのか?

このQ&Aのポイント
  • C言語でintではなくcharを使うべきな理由を詳しく教えてください。
  • C言語のプログラムでintではなくcharを使うべきな理由について教えてください。
  • C言語において、intではなくcharを使用することの重要性について教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

理由はscanfの動作仕様にあります。 %~で、取り込み方が違います。引数には、対応するものが必要です。 %dは「0~9の数字の列」を読み込んで「整数」に変換して「intへのポインタ」が示す場所へ書き込みます。 なので、対応する引数として、 int型の変数aへのポインタである「&a」を使います。 あなたが作ろうとしているプログラムは 「任意の1文字」を読み込んで「変換せずに」、適切な場所へ書き込む。 というもののはずです。「『0~9の数字の列』を読み込んで『整数』に変換」などされては困るのです。 そこで、scanfのマニュアルを読んで、 「任意の1文字」を読み込んで「変換せずに」取り込むには、%何になるのか? それに対応する引数には、どんな型が必要なのかを調べます。 例えば、 http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/scanf.3.html を見ると > c 「最大フィールド幅」 (デフォルトは 1) で指定された幅の文字の列に対応する。 次のポインタは char へのポインタ とあります。 よって ・「任意の1文字」を読み込むには、%c ・対応する型は、 charへのポインタ。 char c と宣言したなら、 &c だとわかります。また、\0が追加されない旨も書いてあるので、char s[2] → scanf("%c",s) 等と、\0用の領域を確保する必要も無いことがわかります。 scanfの仕様(というか、C言語の仕様)として、%の書式と対応する型とを一致させる責任は、プログラマにあります。 間違っていても、エラーにはなりません。(コンパイラによっては、警告が出ることはあります)

noname#181900
質問者

お礼

ありがとうございます。 またおねがいします。

関連するQ&A