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