MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚える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 点です。



本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く