C初級:キーボードから入力させる

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

ここまでの流れはC言語で扱うことが出来る数値について学習してきました。
数値を変数に代入するというプログラミング言語特有の考え方も学びました。

ただし、毎回

a = 10;

では大したプログラムは作成できません。
ユーザ(実行中のプログラムを使っている人)と何かやりとりをするとぐっとコンピュータに何か処理をさせているという雰囲気になってきます。

コンピュータとやりとりをするプログラムを作ってみます。

入力という言葉が出てきますが、コンピュータでの入力と出力についてまとめます。

入力 人 → コンピュータ
出力 コンピュータ → 人

これだけです。
矢印は情報(データ)の流れを意味しています。
入力に対応する関数としては、scanf関数が代表例です。(今回登場します)
出力に対応する関数としては、printf関数が代表例です。

人がコンピュータに対して情報を受け渡すことが入力です。例えば、キーボードを使って数値を入力したり、マウスを操作してボタンをクリックしたり...などです。
対してコンピュータが人に対して何らかの情報を受け渡すことが出力にあたります。例えば、ディスプレイに計算結果を表示したり、スピーカから音声を流したり...といったことなどです。

コンピュータに対して情報を受け渡す...すなわち入力するには、変数を介して行うことがほとんどです。
簡単な例を示します。

サンプルプログラム 05input.c

/* 05input.c 入力 */
#include <stdio.h>
int main(void)
{
	int month;
	
	printf("何月が好き? ");
	scanf("%d", &month);
	
	printf("%d月ってワクワクするよね!\n", month);
	
	return 0;
}

実行すると画面に

何月が好き? [ここにカーソル点滅]

と入力待ちの状態になるので、適当な数値(半角文字で)を入力してエンターキーを押してください。

例えば10を入力してエンターキーを押すと

10月ってワクワクするよね!

と画面に表示してプログラムを終了します。

解説
5行目で整数型変数monthを宣言しています。

8行目のscanf関数はキーボードからの入力を受け付けます。

scanf("%d", &month);

書式指定文字に%dを指定しているので10進数入力を受け付けることになります。
よって8行目の意味は、キーボードから入力した値を変数monthに代入する、ということになります。
代入はどの時点で行われるかというと、キーボードから数値を入力してエンターキーを押した後です。

ちなみに%dの変わりに%oや%xを指定するとそれぞれ8進数、16進数での入力を受け付けることになります。
ただしscanf関数は入力待ちになるだけで画面に何かメッセージを表示する訳ではありません。よってscanf関数の直前の7行目でprintf関数を使って入力を促すメッセージを表示しています。
scanf関数はこのようにprintf関数とセットで使うことが多いです。

また、変数monthの先頭に「&」記号をつけて&monthとしています。scanfでの決まりとしてまずは憶えておいてください。(実際はmonthの変数のメモリ上の番地を表す記述になりますが話が長くなるので後述)

最後に10行目のprintf関数で入力した変数の内容を表示させています。

なんとなく会話しているような実行結果になりますが、実行したときキーボードから100を入力すれば

100月ってワクワクするよね!

とかトンチンカンな表示になります。(コンピュータには月日の認識もなければ、感情もありませんので

次は2種類の数値xとyを入力させて、x+yの足し算をしてみます。

サンプルプログラム 06int.c

/* 06int.c 整数同士の計算 */
#include <stdio.h>
int main(void)
{
	int x, y;
	
	printf("足し算します\n\n");

	printf("数値1を入力してください: ");
	scanf("%d", &x);
	printf("数値2を入力してください: ");
	scanf("%d", &y);
	
	printf("合計は %dです\n", x+y);
	
	return 0;
}

同じように3つの数値を足し算する場合も方法は一緒です。宣言する変数が1つ増えるだけです。

サンプルプログラム 07int.c

/* 07int.c 変数同士の計算(式も表示させる) */
#include <stdio.h>
int main(void)
{
	int x, y, z;
	
	printf("3つの数を足し算します\n\n");

	printf("数値1を入力してください: ");
	scanf("%d", &x);
	printf("数値2を入力してください: ");
	scanf("%d", &y);
	printf("数値3を入力してください: ");
	scanf("%d", &z);
	
	printf("%d + %d + %d = %dです\n", x, y, z, x+y+z);
	
	return 0;
}

実行結果
例として順番に3, 4, 5とキーボードから入力した場合、

3 + 4 + 5 = 12です

と表示されます。

解説
特別なことはしていませんが、16行目のprintf関数で書式指定子 %dが4回登場します。

printf("%d + %d + %d = %dです\n", x, y, z, x+y+z);

一番左の%dから順にxの内容, yの内容, zの内容, x+y+zの計算結果がそれぞれ置き換えられて表示されます。
このように変数の内容は何度も使うことが出来ます。

もう少し具体的な内容で確認してみます。
単価と個数を入力すると金額を表示するプログラムです。
変数はそれぞれtanka, kosu, kingaku として整数型(int型)で宣言しておきます。

金額を求める式は

単価 × 個数 = 金額

となります。

C言語で記述すると

kingaku = tanka * kosu;

です。

サンプルを見てください。

サンプルプログラム kingaku.c

/* kingaku.c */
#include <stdio.h>
int main(void)
{
	int tanka, kosu, kingaku;

	printf("単価 ? ");		/* 単価を入力 */
	scanf("%d", &tanka);

	printf("個数 ? ");		/* 個数を入力 */
	scanf("%d", &kosu);

	kingaku = tanka * kosu;	/* 金額を計算 */
	
	printf("\n金額は \\%d円です\n", kingaku);

	return 0;
}

実行結果

単価? 500 [エンターキーを押す]
個数? 6 [〃]

金額は ¥3000円です

もう少し長めのプログラムで確認します。
3科目のテストの点を入力させて合計と平均を求め、表示させるプログラムです。

サンプルプログラム heikin.c

/* heikin.c */
#include <stdio.h>
int main(void)
{
	int kokugo, sansu, rika;
	int gokei, heikin;
	
	printf("国語の点数? ");
	scanf("%d", &kokugo);
	
	printf("算数の点数? ");
	scanf("%d", &sansu);

	printf("理科の点数? ");
	scanf("%d", &rika);

	gokei = kokugo + sansu + rika;
	heikin = gokei / 3;
	
	printf("\n合計得点: %d\n", gokei);
	printf("平  均: %d\n", heikin);
	
	return 0;
}

実行結果

国語の点数? 100 [エンターキーを押す]
算数の点数? 80 [〃]
理科の点数? 60 [〃]

合計得点: 240点
平  均: 80点

合計を3で割っていますが、この場合はint型の変数を使っているのでもし平均が60.5という数値だとしても60と表示されます。実数を扱うことが出来ないため小数点以下は切り捨てになります。

変数名の付け方について補足します。
日本語読みでも英語読みでもいいので、なるべく意味の分かる変数名をつけてください!
自分の作ったプログラムを他人が見てもわかるようにというのは建前で、自分が作ったプログラムを自分自身が1年後に見てもわかるようにしておけば誰が見ても迷わないです。(と思います)

コメント