- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語についての質問です。)
なぜC言語でintではなくcharを使うべきなのか?
このQ&Aのポイント
- C言語でintではなくcharを使うべきな理由を詳しく教えてください。
- C言語のプログラムでintではなくcharを使うべきな理由について教えてください。
- C言語において、intではなくcharを使用することの重要性について教えてください。
- みんなの回答 (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言語の仕様)として、%の書式と対応する型とを一致させる責任は、プログラマにあります。 間違っていても、エラーにはなりません。(コンパイラによっては、警告が出ることはあります)
お礼
ありがとうございます。 またおねがいします。