苦しんで覚えるC言語

複数の処理の実行


複数の処理の必要性


突然ですが、テストの点数を入力するプログラムを作ってみたいと思います。
これ自体は、今までやってきたことで簡単に実現出来ますが、
今回は更に、100点より大きい点数を間違えて入力した場合、
自動的に100点に修正して記憶するという機能をつけてみます。

このプログラム自体は、そんなに難しいことではありません。
次のプログラムは、先ほどの処理を実現する例です。

#include <stdio.h>

int main(void)
{
	int score;
	printf("点数を入力して下さい:");
	scanf("%d",&score);
	if (score > 100) score = 100;
	printf("点数は %d 点です。\n",score);
	return 0;
}
このプログラムを実行させて100以下を入力した場合の結果は、次の通りになります。

点数を入力して下さい:58 入力したデータ
点数は 58 点です。
このプログラムを実行させて100より大きい入力をした場合の結果は、次の通りになります。

点数を入力して下さい:135 入力したデータ
点数は 100 点です。
ここで、更にもう1つ、入力された点数が100点より大きい場合に、
「入力が 100 より大きいので修正します。」
と言うメッセージを表示するように機能を追加する場合、どうすれば良いでしょうか。

当然、既存のif文のすぐ後ろに、printf文をつなげてもうまくいきません。
if文では、if文のすぐ次にある文しか、判断結果に使わないので、
if文のすぐ後ろに書いたprintf文は、普通の文として、毎回実行されてしまいます。

1つの方法は、if文を2つ使うことです。次のように、

if (score > 100) printf("入力が 100 より大きいので修正します。\n");
if (score > 100) score = 100;
if文を2つ使えば、メッセージを表示させることが可能になります。

目次に戻る

ブロック文


前節のようにすれば、1つの条件に対して、複数の文を実行させることが出来ますが、
同じ条件で何回も比較を行うのは、どう考えても無駄でしかありません。
1つのif文で、複数の文を実行出来る方法があれば、はるかにスマートになります。

C言語には、複数の文を、ひとまとめにする機能が存在しています。
それが、ブロック文(複文)と呼ばれる機能です。
ブロック文
{} で囲むことで、複数の文をまとめる方法。
このブロック文を使うと、1つの文しか置けない場所に複数の文を置くことかできます。
また、ブロック文の中の文は、右に少しずらして書くことが慣習となっています。
始めにインデントを説明しましたが、忘れていた人は思い出して下さい。

ブロック文を使えば、if文の結果で、複数の処理を実行させることが出来ます。
次のプログラムは、ブロック文を使ってメッセージ表示機能を追加します。

#include <stdio.h>

int main(void)
{
	int score;
	printf("点数を入力して下さい:");
	scanf("%d",&score);
	if (score > 100) {
		printf("入力が 100 より大きいので修正します。\n");
		score = 100;
	}
	printf("点数は %d 点です。\n",score);
	return 0;
}
このプログラムを実行させて100以下を入力した場合の結果は、次の通りになります。

点数を入力して下さい:58 入力したデータ
点数は 58 点です。
このプログラムを実行させて100より大きい入力をした場合の結果は、次の通りになります。

点数を入力して下さい:135 入力したデータ
入力が 100 より大きいので修正します。
点数は 100 点です。

目次に戻る