int l[3], i;
char *check;
- /* 引数が3以外の場合は、エラー終了 */
+ /* 引数が3つ以外の場合は、エラー終了 */
if(argc != 4) {
if(argc < 4) {
fprintf(stderr, "too few argument.\n");
}
return -1;
}
- /* 引数が自然数かチェック。自然数以外の場合はエラー終了 */
for(i = 0; i < 3; i++) {
+ /* 引数を整数に変換 */
l[i] = strtol(argv[i+1], &check, 10);
- if(*check != '\0' || l[i] <= 0) {
- fprintf(stderr, "%s: invalid argument.\n", argv[i+1]);
+ /* 整数以外の場合はエラー終了 */
+ if(*check != '\0') {
+ fprintf(stderr, "%s: not integer\n", argv[i+1]);
+ return -1;
+ }
+ /* 0未満の場合はエラー終了 */
+ if(l[i] < 0) {
+ fprintf(stderr, "%s: less than zero\n", argv[i+1]);
return -1;
}
}
puts("equilateral triangle");
}
/* 2辺の長さが等しい場合は、二等辺三角形 */
- else if (l[0] == l[1] || l[1] == l[2] || l[2] == l[0]) {
+ else if(l[0] == l[1] || l[1] == l[2] || l[2] == l[0]) {
puts("isosceles triangle");
}
/* それ以外の場合は、不等辺三角形 */
/**********************************************************************
-triangle_bug.c
+triangle.c
引数として指定された3つの整数が三角形の3辺を表すものとし、
次のうちどれであるかをきめるメッセージを印字する。
不等辺三角形(scalene triangle)
二等辺三角形(isosceles triangle)
正三角形(equilateral triangle)
-ただし、バグを含む。
Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)
http://www.amazon.co.jp/dp/4764900599
int l[3], i;
char *check;
- /* 引数が3以外の場合は、エラー終了 */
+ /* 引数が3つ以外の場合は、エラー終了 */
if(argc != 4) {
if(argc < 4) {
fprintf(stderr, "too few argument.\n");
}
return -1;
}
- /* 引数が0以上の整数かチェック。0以上の整数以外の場合はエラー終了 */
for(i = 0; i < 3; i++) {
+ /* 引数を整数に変換 */
l[i] = strtol(argv[i+1], &check, 10);
- if(*check != '\0' || l[i] < 0) {
- fprintf(stderr, "%s: invalid argument.\n", argv[i+1]);
+ /* 整数以外の場合はエラー終了 */
+ if(*check != '\0') {
+ fprintf(stderr, "%s: not integer\n", argv[i+1]);
+ return -1;
+ }
+ /* 0未満の場合はエラー終了 */
+ if(l[i] < 0) {
+ fprintf(stderr, "%s: less than zero\n", argv[i+1]);
return -1;
}
}