突然ですが、テストの点数を入力するプログラムを作ってみたいと思います。
これ自体は、今までやってきたことで簡単に実現出来ますが、
今回は更に、100点より大きい点数を間違えて入力した場合、
自動的に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 点です。
ここで、更にもう1つ、入力された点数が100点より大きい場合に、
点数を入力して下さい:135 入力したデータ
点数は 100 点です。
当然、既存のif文のすぐ後ろに、printf文をつなげてもうまくいきません。
if文では、if文のすぐ次にある文しか、判断結果に使わないので、
if文のすぐ後ろに書いたprintf文は、普通の文として、毎回実行されてしまいます。
1つの方法は、if文を2つ使うことです。次のように、
if文を2つ使えば、メッセージを表示させることが可能になります。if (score > 100) printf("入力が 100 より大きいので修正します。\n"); if (score > 100) score = 100;
前節のようにすれば、1つの条件に対して、複数の文を実行させることが出来ますが、
同じ条件で何回も比較を行うのは、どう考えても無駄でしかありません。
1つのif文で、複数の文を実行出来る方法があれば、はるかにスマートになります。
C言語には、複数の文を、ひとまとめにする機能が存在しています。
それが、ブロック文(複文)と呼ばれる機能です。
このブロック文を使うと、1つの文しか置けない場所に複数の文を置くことかできます。
[ ブロック文 ]
{} で囲むことで、複数の文をまとめる方法。
ブロック文を使えば、if文の結果で、複数の処理を実行させることが出来ます。
次のプログラムは、ブロック文を使ってメッセージ表示機能を追加します。
このプログラムを実行させて100以下を入力した場合の結果は、次の通りになります。#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 点です。
点数を入力して下さい:135 入力したデータ
入力が 100 より大きいので修正します。
点数は 100 点です。