上のプログラムで, 例えば 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);
}