C言語では、文字を一文字単位で入出力するためにgetchar関数とputchar関数が、文字列を一行単位で入出するためにgets関数とputs関数が用意されています。
上記の関数は入出力の対象が文字ですが、今回のC言語超入門では、
数値を入出力することができるscanf関数とprintf関数について、使い方を解説していきます。
なお、文字を一文字単位で入出力するgetchar関数とputchar関数についてはC言語長入門(第26回)で、
文字列を一行単位で入出力するgets関数とputs関数についてはC言語長入門(第27回)で、
それぞれ解説していますので参考にしてくださいませ。

簡単な数値入出力プログラムの例

次のプログラム1は、キーボードから数値を入力し、それをディスプレーに出力するサンプル・プログラムです。
 

/* プログラム1 */
#include <stdio.h>
main() {
	int x;
	scanf("%d", &x);
	printf("%d\n", x);
}
※プログラム1の実行結果(キーボードから「123」と入力した場合)
123 (←キーボードからの入力)
123

scanf関数もprintf関数もさまざまなデータ型を取り扱うことができる万能な関数なのですが、
今回は整数型の数値の入出力に特化して解説していきます。
scanf関数とprintf関数の基本的な使い方につきましては、C言語超入門(第29回)で解説いたしますので、併せてご確認くださいませ。
さて、上記のプログラム1で注目していただきたいところは、scanf関数の引数としての変数xの使い方です。
scanf関数では、変数xを

	&x

と記述していますね。
実は、scanf関数で変数に数値を入力したいときは、
変数名を指定するのではなく、変数のアドレスを記述しなければなりません。
C言語では、変数名の前に & を付けますと、その変数のアドレスを示す、というルールがあります。
変数のアドレスとは、コンピューター上のどこに変数が格納されているのかを指し示す番地のことです。
この、変数のアドレスの概念はC言語を学んでいく上でとても大切なことですが、少し複雑です。
今回のC言語超入門では数値の入出力の方法について説明を進めるため、アドレスの概念についての解説は省略しますが、
現時点では、scanf関数を使って変数に数値を格納したいときは変数名の前に & を付ける、ということを覚えて頂ければ十分です。
なお、変数の数値をディスプレーに出力するprintf関数では、変数名の前に & を付けないことに気を付けてください。
もしprintf関数に渡す変数名の前に & を付けてしまいますと、その変数のアドレスが出力されてしまいます。(プログラム2)

/* プログラム2 */
#include <stdio.h>
main() {
	int x=0;
	printf("x = %d\n",x);
	printf("&x = %d\n",&x);
}
※プログラム2の実行結果(開発環境によって結果が異なります。また実行する度に、実行結果が異なる場合があります)
x = 0
&x = -1259596812

 

入力を促すメッセージ付き数値入力プログラムの例

プログラム1を実行して気付いたことはありませんか。
キーボードから入力をするまで画面に何もメッセージが表示されないため、
何を入力したら良いのか分かりにくかったですよね。
今回はscanf関数の使い方を学ぶサンプル・プログラムのため、このようなユーザーインターフェースであっても問題はなかったかもしれません。
でも実際に利用するプログラムとしては少し不親切なプログラムです。
実用的なプログラムを作ることになったら、以下のプログラム3のように、何を入力したらよいのか、入力を促進するメッセージを表示しましょう。
 

/* プログラム3 */
#include <stdio.h>
main() {
	int x;
	printf("数値を入力してください:");
	scanf("%d", &x);
	printf("あなたが入力した数値は %d ですね。\n", x);
}
※プログラム3の実行結果(キーボードから「123」と入力した場合)
数値を入力してください:123 (←キーボードから 123 を入力)
あなたが入力した数値は 123 ですね。

プログラム3を見て頂くとおわかりのとおり、scanf関数は文字を出力することができませんので、
入力を促進するメッセージを出力したいときは、printf関数を使用します。

scanf関数を使ったループ制御プログラムの作り方

scanf関数を使うことで、ある特定の数値が入力されるまでループを繰り返すプログラムを簡単に作ることができます。
以下のプログラム4は、キーボードから入力された数値を積算し、入力数値として -1 が入力されたら積算結果を表示してプログラムを終了します。
 

/\* プログラム4 \*/
#include <stdio.h>
main() {
	int x,y=0;
	scanf("%d", &x);
	while(x!=-1) {
		y = y + x;
		scanf("%d", &x);
	}
	printf("合計:%d\n", y);
}
※プログラム4の実行結果((キーボードから「1」「2」・・・「10」「-1」と入力した場合)
1
2
3
4
5
6
7
8
9
10
-1
合計:55

上記のプログラム4のように、-1 が入力されたら繰り返しを終了する、という処理は、よく用いられる方法です。

C言語超入門の第28回まとめ

今回のC言語超入門では、標準関数scanf()を使って数値を入出力する方法についてお伝えいたしました。
最後にscanf()関数を使った数値の入出力方法のポイントについておさらいしましょう。
・scanf関数で変数に数値を入力したいときは、変数名を指定するのではなく、変数のアドレスを指定する
・変数名の前に & を付けると変数のアドレスになる
・printf関数では、変数名の前に & を付けない
ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。