サンプルの三角形判定プログラムの仕様を整理
authorj8takagi <j8takagi@nifty.com>
Tue, 11 Jan 2011 14:17:46 +0000 (23:17 +0900)
committerj8takagi <j8takagi@nifty.com>
Tue, 11 Jan 2011 14:17:46 +0000 (23:17 +0900)
sample/triangle/test/05_zero/0.txt
sample/triangle/test/06_minus/0.txt
sample/triangle/test/08_lines/0.txt
sample/triangle/test/08_lines/cmd
sample/triangle/test/10_lesses/0.txt
sample/triangle/test/10_lesses/cmd
sample/triangle/test/11_zeroall/0.txt
sample/triangle/test/12_notint/0.txt
sample/triangle/triangle.c
sample/triangle/triangle_bug.c

index a562ff8..e3af1aa 100644 (file)
@@ -1,3 +1,6 @@
 not triangle
 not triangle
 not triangle
+not triangle
+not triangle
+not triangle
index aea1c3d..c7dfd96 100755 (executable)
@@ -1,3 +1,6 @@
 ../../triangle 1 2 3
 ../../triangle 1 3 2
+../../triangle 2 1 3
+../../triangle 2 3 1
 ../../triangle 3 1 2
+../../triangle 3 2 1
index a562ff8..e3af1aa 100644 (file)
@@ -1,3 +1,6 @@
 not triangle
 not triangle
 not triangle
+not triangle
+not triangle
+not triangle
index 8056645..9f3ced4 100755 (executable)
@@ -1,3 +1,6 @@
 ../../triangle 1 2 4
 ../../triangle 1 4 2
+../../triangle 2 4 1
+../../triangle 2 1 4
+../../triangle 4 1 2
 ../../triangle 4 2 1
index 9065bfa..3899e27 100644 (file)
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
     int l[3], i;
     char *check;
 
-    /* 引数が3以外の場合は、エラー終了 */
+    /* 引数が3以外の場合は、エラー終了 */
     if(argc != 4) {
         if(argc < 4) {
             fprintf(stderr, "too few argument.\n");
@@ -29,11 +29,17 @@ int main(int argc, char *argv[])
         }
         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;
         }
     }
@@ -47,7 +53,7 @@ int main(int argc, char *argv[])
         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");
     }
     /* それ以外の場合は、不等辺三角形 */
index f4afd0d..91403fd 100644 (file)
@@ -1,11 +1,10 @@
 /**********************************************************************
-triangle_bug.c
+triangle.c
 引数として指定された3つの整数が三角形の3辺を表すものとし、
 次のうちどれであるかをきめるメッセージを印字する。
     不等辺三角形(scalene triangle)
     二等辺三角形(isosceles triangle)
     正三角形(equilateral triangle)
-ただし、バグを含む。
 
 Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)
 http://www.amazon.co.jp/dp/4764900599
@@ -20,7 +19,7 @@ int main(int argc, char *argv[])
     int l[3], i;
     char *check;
 
-    /* 引数が3以外の場合は、エラー終了 */
+    /* 引数が3以外の場合は、エラー終了 */
     if(argc != 4) {
         if(argc < 4) {
             fprintf(stderr, "too few argument.\n");
@@ -30,11 +29,17 @@ int main(int argc, char *argv[])
         }
         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;
         }
     }