サイトマップ / C言語講座>出入り口>総目次>目次:入出力(1)>printf( )とscanf( )の戻り値
/* 前にも触れたように、関数を呼び出す側はスタックに値(引数)を積み、関数はスタックから引数を取り出し、何かの処理を行います。処理の結果(戻り値)を関数はスタックに積みます。関数から抜けて関数を呼び出した側へ制御が戻った時、呼び出し側はスタックに積まれたデータを取り出し、何かの処理をします。
スタックは後入れ先出し(Last in First Out: LIFO)というやり方で管理されているメモリです。
関数を理解するには、どんな引数を取って戻り値は幾つかということを知る必要があります。本講座ではこれから様々な標準ライブラリ関数について学びます。その際、下記に示す書式で簡単な説明を加えます。
#include <インクルードファイルの名前> 戻り値の型 関数名(引数の並び); 例:関数の使用例 関数の実行結果 戻り値 成功した場合 その場合の戻り値 失敗した場合 その場合の戻り値
具体例として標準ライブラリ関数printf( )を下記に示します。
#include <stdio.h> int printf(const char *format, ...); 例:printf(format, ...); 関数の実行結果 戻り値 成功した場合 出力した文字数 失敗した場合 EOF
一行目は printf( )を使うにはstdio.hをインクルードする必要があることを示しています。
二行目は現段階では完全に説明することは困難です。その完全な説明は将来にゆだねるとして、ここでは簡単な説明に留めて置きます。わからなければ読み飛ばして下さい。
二行目の最初の'int'はprintf( )の戻り値が、int型の整数であることを示しています。具体的にはコンソールに出力した文字数です。'format'の型は const char * 型です。'const'が付いていると受け取った関数の側で、内容を変更できません。変更するとコンパイルエラーになります。コンパイルエラーになると、コンパイルを中止し、エラーの内容を出力してコンパイラが処理を中止します。char型は既に学びましたが、char *型はchar型の変数のアドレスという意味になります。受け取ったprintf( )はアドレスから'format'という文字列の中身を読みます。
次の引数は'...'です。これはここに可変個の引数がくることを示します。可変個とは、ゼロ個以上の数の未定な引数がくるということです。
printf( )はうまく文字をコンソールに表示できた時は、その文字数を返します。失敗した時は、'EOF'という特別の値が返ってきます。'EOF'はファイルの終わり(End Of File)を意味します。'EOF'が幾つかは処理系によって違いますが、-1か0のどちらかです。
重要:'EOF'はファイルの終わり(End Of File ) を意味する数。
'EOF'は記号定数です。プログラムの中に数字そのものを書き込むと、あとでその意味が分からなくなります。また、複数の箇所にその数字があるとソースプログラムの修正が大変です。バグの原因にもなりかねません。そこで記号定数を使います。コンパイラは引用符(" ")なしで記号定数が出てくると、定義されている値に書き換えてくれます。この場合 EOF と書いておけば、EOFが-1の処理系では-1に、0の処理系では0に書き換えてくれます。EOFと書いて置けば、処理系によるEOFの値を意識する必要はなくなります。
重要:ソースプログラムの中には数字そのものではなく、なるべく記号定数を使う。
scanf( )もprintf( )と良く似た引数を取ります。scanf( )は成功した場合、値を代入に成功した引数の数を返します。戻り値は入力に成功したかどうかの判断に使えます。
#include <stdio.h> int scanf(const char *format, ...); 関数の実行結果 戻り値 成功した場合 値を代入したデータ引数の数 失敗した場合 EOF
例:"%s %d %lf"が成功したら3を返す
今回はキーボードからアルファベットを複数個入力して、scanf( )と printf( )の戻り値を表示します。 */
#include <stdio.h> void main(void); void main(void) { int n, m; char str[256]; printf("アルファベットを幾つか入力して下さい "); n = scanf("%s", str); /* n に変換に成功した変数の数が入る */ printf("\n変換に成功したデータの個数:%d\n", n); printf("データの内容:"); m = printf("%s\n", str); /* m に出力した文字数が入る */ printf("データの字数: %d\n", m - 1); } |
/* 最後のprintf( )の2番目の引数に、m - 1が指定されているのは、キーボードから入力された文字と改行コードを出力しているので、出力した字数を数えるため、改行コードの分を差し引いているためです。 */
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−