1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。
[EGAMIX トップ] > [授業のページ] > [1999年度 プログラミングIII] > [授業ノート・資料]

[Back] [Index]
 
エラー処理

 
エラー処理
 
誤りの事をエラー(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" を書きこみモードでオープンしてみる


 

 
  
[Back] [Index]


egami@egamix.com