🚪 はじめてのC
🎯 scanfで数値を読み取り、&の意味と戻り値の確認までできる
ここまでのプログラムは、いつ動かしても同じ結果でした。人からの入力を受け取れるようになると、プログラムは急に「道具」になります。標準入力から値を読む代表が scanf です。
いちばん短い例
#include <stdio.h>
int main(void) {
int nen;
printf("好きな数を入れてください: ");
scanf("%d", &nen);
printf("入力されたのは %d です\n", nen);
return 0;
}int nen; で入れ物(変数)を用意し、scanf("%d", &nen); でそこに数値を読み込みます。書式指定子は printf と同じ考え方で、%d は整数、%lf は double、%c は1文字です。
なぜ & が要るのか
printf は値を「見せる」だけなので、値そのものを渡せば済みます。scanf は変数の中身を「書き換える」ので、値ではなく置き場所を教える必要があります。&nen は「nen という箱の番地」という意味です。
2つまとめて読む
#include <stdio.h>
int main(void) {
int tate, yoko;
printf("縦と横を空白区切りで: ");
scanf("%d %d", &tate, &yoko);
printf("面積は %d です\n", tate * yoko);
return 0;
}%d %d と並べれば、空白や改行で区切られた2つの数を続けて読めます。scanf は空白・タブ・改行を「区切り」として読み飛ばします。
戻り値を確かめる
scanf は「いくつ読み込めたか」を返します。これを見れば、入力が想定どおりだったか判定できます。
#include <stdio.h>
int main(void) {
int n;
printf("整数を1つ: ");
if (scanf("%d", &n) == 1) {
printf("%d を受け取りました\n", n);
} else {
printf("整数として読めませんでした\n");
}
return 0;
}if は次のトラックの内容ですが、「1つ読めたら成功」という形だけ覚えておくと、この先ずっと役に立ちます。
罠・注意
& を忘れる。 コンパイルが通ってしまうことがあり、実行するといきなり異常終了します。scanf を書いたら & を指差し確認します。
double は %lf。 printf では %f ですが、scanf では %lf です。ここだけ非対称なので間違えやすいところです。
入力を促すメッセージを先に出す。 printf で「何を入れてほしいか」を書かないと、画面が固まったように見えます。
まとめ
scanf は書式に従って標準入力から値を読み、読み込めた個数を返します。書き換える相手の場所を教えるため & が必要で、double を読むときだけ %lf になります。そして——scanf には初心者を必ず一度つまずかせる罠があります。次のトピックで正面から片づけます。
キーボードからの入力を読み取り、変数に格納する標準ライブラリの関数のこと。変数の前に&を付け忘れるミスが定番の罠として知られる。戻り値として、正しく読み取れた個数が返ってくる点も覚えておくとよい。
値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。
printfやscanfで使う%dや%fのような記号のこと。続けて渡す値をどんな型・どんな見た目として扱うかを指定する役割を持つ。指定する型と実際に渡す値の型がずれると、思わぬ表示結果になることがある。
小数を含む数値を扱うための型のこと。floatより広い範囲と高い精度を持ち、実数計算における標準的な選択肢として使われる。小数点以下の桁数が多い計算でも、比較的高い精度を保てるのが特徴。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。