入出力関数を使いこなす
このページでは、printf()関数とscanf()関数を究めたい。
準備
標準的なCの処理系には、printf()
で画面に文字を表示したり、scanf()
でキーボードからデータ入力する機能が備わっている。
これらは、標準入出力関数、と呼ばれる。こうした機能を使う場合は、プログラムの先頭部分に、
#include <stdio.h>
と書いておくこと。stdioはstandard input/output(つまり、標準入出力) に由来している。
以下に、標準出力にデータを出力するためのprintf()
関数と、標準入力からデータ入力を行なうためのscanf()
関数の使用例を示す。
これらの関数は、書式を変えることによって、いろいろと小回りが効く。
基本的な使い方は是非押さえておいてほしい。
printf( )の書式設定の例
記 述 例 (a = 123 ; x = 123.45678 ; の場合) |
出 力 結 果 | 備 考 |
printf("abc") ; printf("def") ; |
abcdef |
改行なしの例。 |
printf("abc\n") ; printf("def\n") ; |
abc[改行] def[改行] |
"\n"は改行 |
printf("a=%d x=%f\n",a,x) ; |
a=123 x=123.45678[改行] |
%dはint型変数に、 %fはfloat型変数に用いる |
printf("a=%05d\n",a) ; |
a=00123[改行] |
"%0md"でm桁表示(空いた桁には0を埋める) |
printf("a=%5d\n",a) ; |
a= 123[改行] |
"%md"でm桁表示 |
printf("a=%x\n",a) ; |
a=7b[改行] |
"%x"で16進数表示 |
printf("x=%010.3f\n",x) ; |
x=000123.457[改行] |
"%0m.nf"で、全体をm桁、うち、小数点以下をn桁で表示。 空いた桁は0で埋める。 |
printf("x=%10.3f\n",x) ; |
x= 123.457[改行] |
"%m.nf"で、全体をm桁、うち、小数点以下をn桁で表示。 |
printf("x=%.1f\n",x) ; |
x=123.5[改行] |
"%.nf"で、小数点以下をn桁で表示。 |
printf("%f %%\n",x) ; |
123.45678 %[改行] |
"%%" で % を表示 |
printf("x=%e\n",x) ; |
x=1.234568e+02[改行] |
"%e"で指数表示。e+02は10の2乗という意味。 |
scanf( ) の記述例
記 述 例 (int a,b ; float x ;) |
キー入力 | 結 果 |
scanf("%d%d",&a,&b) ; |
123 456[改行] |
a=123 b=456 |
scanf("%d%d",&b,&a) ; |
123 456[改行] |
a=456 b=123 |
scanf("%d%f",&a,&x) ; |
123 3.1415[改行] |
a=123 x=3.1415 |
scanf("a=%d",&a) ; |
a=123[改行] |
a=123 |
scanf("a=%d",&a) ; |
123[改行] |
aに値はセットされない。 入力パターンが"a=整数値"でないため。 |
scanf( )
にまつわる注意(中上級者向き)
scanf()
関数は、標準入力からのデータを、何もチェックしないままに
メモリー(変数のデータ領域)に書き込んでしまうので、間違った、あるいは、悪意を持ったデータ
入力に対して、プログラマーが意図しない動作を引き起こす可能性がある(それが、攻撃者の意図だったりもする)。
そのようなわけで、scanf()
関数の使用は「危険」とされている。
ただ、「安全な」プログラムを書けるようになるまでは、覚えなければならない基本事項はまだまだあるし、 当面「自分の練習用」として使う限りにおいては問題ないので、細かいことは気にせずに先に進もう。