1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
エラー処理 |
誤りの事をエラー(error)という。例えば、
次の「逆数を表示するプログラム」を考えてみる。
#include <stdio.h> main()
{
int a ;
float b ;printf("割る数を入力してください :") ;
scanf("%d" , &a ) ;
b = 1.0 / a ;
printf("逆数は %f です。\n", b);
}
このプログラムは入力する数が0以外で正しく動作する。
では、入力した数が0だったら・・・
この点を考慮してプログラムに変更を加えると・・・
#include <stdio.h> main()
{
int a ;
float b ;printf("割る数を入力してください :") ;
scanf("%d" , &a ) ;
if (a != 0) {
b = 1.0 / a ;
printf("逆数は %f です。\n", b);
} else {
printf("入力が無効です(0による割算)。\n");
}
}
0による割り算を避けて通るようにプログラムが改善できた。
・エラーが発生しないように事前にチェックする(ようにプログラムを組む)
・エラーが発生した後には、プログラムが正常に復帰できるようにする
以下のような場合(一部)にはエラーが発生する
・読み込みモードでオープンしようとしたファイルが存在しなかった。
たとえば以下のようなプログラム。
FILE *fpi; if ( ( fpi = fopen( "input.data", "r") ) == NULL ) {
printf("ファイルがありません (input.data)\n");
exit(1);
}
(このプログラムは副作用を用いて記述されている。)
同じことであるが、このエラー処理は以下のようにも書きかえられる。
FILE *fpi; fpi = fopen( "input.data", "r");
if ( fpi == NULL ) {
printf("ファイルがありません (input.data)\n");
exit(1);
}
・ファイルを作成しようとしたが(なんらかの原因で)失敗した。
たとえば、以下のようなプログラム。
FILE *fpo; if ( ( fpo = fopen( "output.data", "w") ) == NULL ) {
printf("ファイルが作成できません (output.data)\n");
exit(1);
}
同じことであるが、このエラー処理は以下のようにも書きかえられる。
FILE *fpo; fpo = fopen( "output.data", "w");
if ( fpo == NULL ) {
printf("ファイルが作成できません (output.data)\n");
exit(1);
}
・書き込みモードでオープンしたがディスクが一杯になった。
実習
"Helloプログラム" にエラー処理を組み込んでみる。エラー処理の効果を確かめる。
読み込み時 存在しないファイルをオープンしてみる
書きこみ "/root/OUTPUT" を書きこみモードでオープンしてみる