C言語基礎|キーボード入力と表示

プログラムを「対話的」にしてみよう

これまでのプログラムでは、
あらかじめ決められた数値を使って計算し、その結果を表示してきました。

しかし、それだけでは少し物足りませんよね。

  • 実行するたびに違う値を使いたい。
  • 自分で数値を入力して結果を見たい。

そんなときに必要になるのが、
キーボードからの入力 です。

この節では、
キーボードから整数値を読み込み、
その値を使って処理し、画面に表示する方法を学習します。

scanf関数とは何か

C言語で、
キーボードからの入力を行うための関数
scanf 関数です。

scanf は
スキャンエフ
と発音します。

関数名役割
scanfキーボードから値を読み込む。
printf画面に表示する。

これまで使ってきた printf と組み合わせることで、
入力 → 処理 → 表示
という基本的な流れが作れるようになります。

まずは入力した値をそのまま表示する

最初はシンプルに、
入力した整数をそのまま表示するプログラムを作ってみましょう。

プロジェクト名:chap1-11-1 ソースファイル名:chap1-11-1.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 入力した整数を表示する

#include <stdio.h>

int main(void)
{
    int value;

    printf("数値を入力してください:");
    scanf("%d", &value);    // 整数を読み込む

    printf("入力された値は%dです。\n", value);

    return 0;
}

実行例

数値を入力してください:42
入力された値は42です。

このように、
プログラムが入力を待ち、
入力後に結果を表示する形になります。

scanf関数の書式を確認しよう

scanf 関数の基本的な書式は次のとおりです。

scanf(書式文字列, 変数のアドレス);
要素意味
書式文字列どの形式で読み込むか
変数のアドレス読み込んだ値を格納する場所

今回使用している %d は、
10進数の整数を読み込む
という指定です。

なぜ & を付ける必要があるのか

scanf 関数では、
変数名の前に & を付けています。

scanf("%d", &value);

これは、

値を入れる箱の場所を教えている

という意味になります。

printf では値を取り出すだけでしたが、
scanf では
変数の中身を書き換える必要がある
ため、& を使って場所を指定します。

関数& が必要か
printf不要
scanf必要

入力した値を使って計算してみよう

次は、
読み込んだ整数を使って計算を行い、
その結果を表示してみましょう。

ここでは、
入力した数を3倍する プログラムに変更します。

プロジェクト名:chap1-11-2 ソースファイル名:chap1-11-2.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 入力した整数を3倍して表示

#include <stdio.h>

int main(void)
{
    int number;

    printf("整数を入力してください:");
    scanf("%d", &number);

    printf("その数の3倍は%dです。\n", number * 3);

    return 0;
}

実行例

整数を入力してください:15
その数の3倍は45です。

このように、
入力 → 計算 → 表示
という流れが完成しました。

演算子 * の意味

このプログラムで使っている * は、
乗算(掛け算) を表す演算子です。

number * 3

は、

  • number に入っている値
  • を 3 倍する

という意味になります。

なお、

3 * number

と書いても、同じ結果になります。

キーボード入力を使うと何ができるようになるか

scanf を使えるようになると、

  • 実行ごとに違う値で試せる。
  • 条件分岐や繰り返しと組み合わせられる。
  • 本格的なプログラムに近づく。

といったことが可能になります。

要素役割
変数入力した値を保持
scanf入力を受け取る
printf結果を表示

この節で押さえておきたいポイント

ポイント内容
scanfキーボードから入力する関数
%d整数の入力指定
&変数の場所を指定
入力処理値を変数に格納する

printf と scanf はセットで使われることが多い
という点も覚えておきましょう。

演習問題

演習 1-5

キーボードから整数値を1つ読み込み、
その値に 13 を加えた結果 を表示するプログラムを作成せよ。

(表示例)
整数を入力してください:56
56に13を加えると69です。

解答例

プロジェクト名:chap1-11-3 ソースファイル名:chap1-11-3.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 入力した整数に13を加えて表示

#include <stdio.h>

int main(void)
{
    int n;

    printf("整数を入力してください:");
    scanf("%d", &n);

    printf("%dに13を加えると%dです。\n", n, n + 13);

    return 0;
}

演習 1-6

キーボードから整数値を1つ読み込み、
その値から 7 を減じた結果 を表示するプログラムを作成せよ。

(表示例)
整数を入力してください:58
58から7を減じると51です。

解答例

プロジェクト名:chap1-11-4 ソースファイル名:chap1-11-4.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 入力した整数から7を引いて表示

#include <stdio.h>

int main(void)
{
    int n;

    printf("整数を入力してください:");
    scanf("%d", &n);

    printf("%dから7を減じると%dです。\n", n, n - 7);

    return 0;
}