
はじめてのC言語 | 第11回
はじめに
前回は、文字と文字列の基本を学びました。
今回は、キーボードから入力を受け取る方法を扱います。
この回の目的は次の4点です。
- scanf の基本形を理解する
- 整数を入力として受け取れるようにする
- 変数のアドレスを渡す理由を知る
- 初学者がつまずきやすい点を先に押さえる
scanf とは何か
scanf は、標準入力から値を読み取るための関数です。
ここでいう標準入力とは、通常はキーボードからの入力です。
たとえば、ユーザーが入力した整数を変数に保存したいときに使います。
最初のサンプルコード
ソースコード
input_number.c という名前で保存します。
#include <stdio.h>
int main(void) {
int age;
printf("age: ");
scanf("%d", &age);
printf("You entered: %d\n", age);
return 0;
}実行手順
1. 作業ディレクトリに移動する
cd ~/Desktop2. コンパイルする
clang input_number.c -o input_number3. 実行する
./input_number4. 値を入力する
実行すると、次のように表示されます。
age:ここで 20 と入力して Enter キーを押します。
実行例:
age: 20
You entered: 20コードの読み方
int age;
入力された整数を保存するための変数 age を宣言しています。
printf(“age: “);
入力を促すメッセージを表示しています。
scanf(“%d”, &age);
ここが入力を受け取る部分です。
- %d : 整数を読み取る
- &age : 読み取った値を age に格納する場所を渡す
printf(“You entered: %d\n”, age);
入力された値を確認のために表示しています。
なぜ &age と書くのか
scanf は、読み取った値を変数の中に書き込みます。
そのため、変数そのものではなく、「その変数が置かれている場所」を渡す必要があります。
C言語では、その場所を表すために & を使います。
scanf("%d", &age);この段階では、&age は「age に値を書き込むための指定」と理解すれば十分です。
整数を2つ入力する例
scanf では、複数の値をまとめて読み取ることもできます。
#include <stdio.h>
int main(void) {
int x;
int y;
printf("x y: ");
scanf("%d %d", &x, &y);
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}実行例:
x y: 10 20
x = 10
y = 20入力するときは、空白で区切って 10 20 のように書けます。
入力した値で計算する例
#include <stdio.h>
int main(void) {
int a;
int b;
printf("a b: ");
scanf("%d %d", &a, &b);
printf("sum = %d\n", a + b);
return 0;
}実行例:
a b: 3 5
sum = 8入力を使うと、毎回違う値でプログラムを試せます。
文字列入力は最初は分けて考える
scanf は文字列入力にも使えますが、初学者向けにはまず整数入力から確実に理解する方が安全です。
文字列入力は、配列サイズや空白の扱いで混乱しやすいためです。
この回では、int 型の入力に絞って理解すれば十分です。
初心者がつまずきやすい点
age ではなく &age
整数を scanf で読むときは、変数名だけではなく & を付けます。
正しい例:
scanf("%d", &age);誤った例:
scanf("%d", age);後者は誤りです。
%d は整数用
%d は int 型の入力に使います。
型が違うのに %d を使うと、正しく読み取れません。
入力待ちの状態で止まって見える
scanf を使ったプログラムは、入力されるまで先に進みません。
止まっているように見えても、入力待ちであることがあります。
scanf の戻り値も重要
技術的には、scanf は読み取りに成功した個数を返します。
初学者向けでも、この点は早めに知っておくと安全です。
たとえば、整数を1つ読むなら、成功時は 1 が返ります。
より安全な書き方
#include <stdio.h>
int main(void) {
int age;
printf("age: ");
if (scanf("%d", &age) != 1) {
printf("Input error\n");
return 1;
}
printf("You entered: %d\n", age);
return 0;
}このコードでは、整数として正しく読めなかった場合にエラーとして終了します。
なぜ戻り値を確認するのか
たとえば数字ではなく文字を入力すると、期待どおりに読み取れないことがあります。
scanf の戻り値を確認すると、その失敗を検出できます。
初学者向けの最初の段階では、まず基本形を覚え、その後に戻り値確認を加える流れで問題ありません。
ただし、実務や安全なコードでは確認する方が適切です。
よくあるエラー
warning: format specifies type ‘int *’ but the argument has type ‘int’
原因: & を付け忘れています。
誤った例:
scanf("%d", age);正しい例:
scanf("%d", &age);数字以外を入れて期待した結果にならない
原因: %d は整数を期待しているためです。
文字列や記号を入力すると、読み取りに失敗します。
入力が複数あるのに書式が合っていない
たとえば、2つ入力したいのに %d が1つしかないと正しく読めません。
正しい例:
scanf("%d %d", &x, &y);練習用コード
整数を1つ入力して表示する
#include <stdio.h>
int main(void) {
int number;
printf("number: ");
scanf("%d", &number);
printf("%d\n", number);
return 0;
}整数を2つ入力して合計を表示する
#include <stdio.h>
int main(void) {
int x;
int y;
printf("x y: ");
scanf("%d %d", &x, &y);
printf("%d\n", x + y);
return 0;
}まとめ
今回のポイントは次のとおりです。
- scanf を使うとキーボードから値を読み取れる
- int を読むときは %d を使う
- scanf には変数の場所を渡すので &変数名 と書く
- 入力待ちで止まって見えるのは正常な動作である
- より安全にするなら scanf の戻り値を確認する
この回では、scanf を使って整数入力を受け取る方法を確認しました。
表示だけだったプログラムに入力が加わると、動きのあるプログラムを書けるようになります。
次回予告
次は、ポインタの基本を学びます。
今回登場した &ageのような書き方の正体も、ここでしっかり理解できるようになります。
最初は少し難しく感じるかもしれませんが、心配はいりません。ひとつずつ、ゆっくり進めていきましょう。

