入出力関数を使いこなす

このページでは、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()関数の使用は「危険」とされている。

ただ、「安全な」プログラムを書けるようになるまでは、覚えなければならない基本事項はまだまだあるし、 当面「自分の練習用」として使う限りにおいては問題ないので、細かいことは気にせずに先に進もう。