今回の目的
標準入力から数値を入力できるようにすることが目的です。
標準入力の利用
scanf (スキャンエフ) 関数を利用することで標準入力から入力できます。
具体例を見てもらうのが手っ取り早いと思うので、以下の例をご覧ください。
int a;
scanf("%d", &a);
printf("%d\n", a);
はじめの行で、利用する変数を宣言しています。
そして、その次に scanf 関数を使って入力を行なっています。
最後の行では、入力した数値を printf 関数で表示し、入力ができているか確認をしています。
scanf 関数は次のような形式で利用します。
scanf("フォーマット文字列", &変数1, &変数2, ...);
上を見て、なにかと似ていると思いませんか?
そう、printf 関数とそっくりなのです。
しかし、大きく違う所が1つあります。
それは、変数名の前に&がついているところです。
この & には意味があるのですが、これについて扱うのはしばらく先になります。
そのため、とりあえずは scanf 関数を利用するときには、変数の前に & を付けないといけないと覚えてください。
あと、最後に改行がないことにも注目してください。
scanf 関数では改行は必要ありません。
ただし、ユーザーは入力後に改行をする必要があります。
scanf 関数の使用例
printf 関数と違って、scanf 関数は書式などを気にしなくていい場合が多いので、
scanf 関数のほうが使うのは楽だと思います。
以下は、型別の使用例になります。
入力はすべて、10進数でされるとします。
例
short a;
int b;
long c;
long long d;
float e;
double f;
long double g;
scanf("%hd", &a);
scanf("%d", &b);
scanf("%ld", &c);
scanf("%lld", &d);
scanf("%f", &e);
scanf("%lf", &f);
scanf("%Lf", &g);
char 型の扱い
char 型の入力は特殊なため、今回は扱いません。
文字列の所でまとめて扱うので、それまで待ってください。
double 型の入力
double 型は printf 関数では %f でしたが、scanf 関数では %lf となります。
これはよく間違えられるので、注意してください。
- [迷信] double の出力書式は "%lf"
http://www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html
10進数以外での読み込み
もちろん、10進数以外でも入力ができます。
しかし、人間が入力する場合は 10 進数が多いのではないかと思います。
以下は 16 進数での入力の例です。
int a;
scanf("%x", &a);
入力した数値を利用する
数値を入力したとしても、実際に利用しなければ意味がありません。
scanf 関数で入力した数値は、変数に代入したときと同じように扱うことができます。
例
整数を2つ入力して、その和を表示する。
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
printf 関数のように、一度に2つの数値を入力することができます。
scanf 関数以外の標準入力関数
scanf 関数以外にも標準入力から入力する関数がありますが、今回は扱いません。
理由は、まだ教えていない文字列の扱いに関する知識が必要だからです。
課題
課題1
int 型の変数 a, b を宣言しなさい。
次に、標準入力から2つの整数 (10進数) を変数 a, b に読み込み、その積を表示しなさい。
実行例
5 3 がユーザーの入力、15 がプログラムの出力です。
./a.out 5 3 15
課題2
四則演算 の課題2で製作したプログラムを改造し、a, b, c を固定ではなく、標準入力から与えるようにしなさい。
実行例
1 1 -6 がユーザーが入力したもの、-3 2 がプログラムの出力です。
./a.out 1 1 -6 2.000000 -3.000000
挑戦課題
- AOJ 10001: X Cubic
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10001
- AOJ 10002: Rectangle
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10002
- AOJ 10008: A / B Problem
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10008
- AOJ 10009: Circle
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10009