next up previous
Next: exit() は仕事をしている Up: 例 1: ヘロンの公式を使った 3 Previous: 補足 1: 変数のスコープ

補足 2: エラー処理

上のプログラムで, 例えば 3 辺の値として 1, 2, 5 を代入すると エラーが発生します(実験せよ). これは, 1, 2, 5 を 3 辺とする 3 角形が存在しないからです. ということで, このエラー処理まで 考慮に入れたプログラムの例を以下に書いておきます.

正常終了した時に, shell に 0, 3角形にならない値が入力された時には, 1 を返して処理を終了するようにしました. また fprintf は 標準エラー出力にメッセージを出すために使われており, exit() は shell に括弧内の値を返した後, プログラムを終了する関数です.

/* File name 4-3.c */

#include <stdio.h>
#include <math.h>
#define BUFFSIZE 1024

double heron(double a, double b, double c);

int main()
{
     double x, y, z, area;
     char nyuryoku[BUFFSIZE];

     printf("Input the lengths of sides.>>");
     fgets(nyuryoku, BUFFSIZE, stdin);
     sscanf(nyuryoku, "%lf %lf %lf", &x, &y, &z);

     area = heron(x, y, z);
     printf("The area is %f\n", area);
     return 0;
}

double heron(double a, double b, double c)
{
     double s, s2;

     s = (a + b + c)/2.0 ;
     s2= s*(s-a)*(s-b)*(s-c);

     if (s2 < 0){
          fprintf(stderr, "%lf, %lf and %lf do not make a triangle.\n", a, b, c);
          exit(1);
     }
     return sqrt(s2);
}



Next: exit() は仕事をしている Up: 例 1: ヘロンの公式を使った 3 Previous: 補足 1: 変数のスコープ