-1

三角形の型を決めるプログラムを書きます。ユーザーが文字列入力を入力すると、エラーが発生します。二重入力に対してもエラーを出したい。それを行うために、私はこれを試しました

else if (s1[i] == '.') {
                found_double = 1;
                break;

.ただし、プログラムは文字列としても認識します。どうすればこれを解決できますか? 完全なコードは以下のとおりです。

/*
 * HW3-3.c
 *
 *  Created on: Oct 21, 2012
 *      Author: mert
 */


 #include <string.h>
 #include <stdio.h>

 void checkTriangle(char *s1,char *s2,char *s3)
  {
    int i;
    int found_double = 0;
    int found_letter = 0;
    int len = strlen(s1);
    int len2 = strlen(s2);
    int len3 = strlen(s3);

    for( i = 0; i < len; i++)
    {
        if(s1[i] < '0' || s1[i] > '9')
        {
            found_letter = 1; // this variable works as a boolean
            break;
        } else if (s1[i] == '.') {
            found_double = 1;
            break;
        }
    }


    for( i = 0; i < len2; i++)
    {
        if(s2[i] < '0' || s2[i] > '9')
        {
            found_letter = 1; // this variable works as a boolean
            break;
        } else if (s2[i] == '.') {
            found_double = 1;
            break;
        }
    }


    for( i = 0; i < len3; i++)
    {
        if(s3[i] < '0' || s3[i] > '9')
        {
            found_letter = 1; // this variable works as a boolean
            break;
        } else if (s3[i] == '.') {
            found_double = 1;
            break;
        }
    }

    if(found_letter) // value 0 means false, any other value means true
        printf("Please enter an integer instead of string.");
    else if (found_double)
        printf("Please enter an integer instead of double.");
    else
    {
            int side1 = atoi(s1);
            int side2 = atoi(s2);
            int side3 = atoi(s3);

            if ((side1 + side2 > side3 && side1 +  side3 > side2 && side2 + side3 > side1) && (side1 > 0 && side2 > 0 && side3 > 0))
                 {
                // Deciding type of triangle according to given input.
                  if (side1 == side2 && side2 == side3)
                      printf("EQUILATERAL TRIANGLE");
                  else if (side1 == side2 || side2 == side3 || side1 == side3)
                      printf("ISOSCELES TRIANGLE\n");
                  else
                      printf("SCALENE TRIANGLE \n");
                }
                 else
                     printf("\nTriangle could not be formed.");
    }
  }


  int main(void)
  {

      char s[32], s2[32], s3[32];

      printf("Please enter sides of triangle");
      printf("\nPlease enter side 1:");
      gets(s);
      printf("Please enter side 2:");
      gets(s2);
      printf("Please enter side 3:");
      gets(s3);

      checkTriangle(s,s2,s3);
  }
4

2 に答える 2

0

IF の順序を変更できます。

 if (s1[i] == '.')
 {
       //code here
 }
 else if(s1[i] < '0' || s1[i] > '9')
 {
     //code here
 }

「。」のASCIIコードのため は明らかに間隔 ['0', '9'] 内にないため、常に最初の IF でキャッチされます。

次のコードを試して、ASCII 値を確認できます。

  printf("Ascii code for char '.' is %d\n", '.');
  printf("Ascii code for char '0' is %d\n", '0'); 
  printf("Ascii code for char '9' is %d\n", '9'); 
于 2012-10-21T17:34:30.633 に答える
0
  1. s1 は char* であるため、「.」が期待されます。(あなたの言葉で)文字列になります。
  2. 「.」の値 '0' よりも小さい (または '9' よりも大きい) ため、最初の if を入力し、else if をスキップします。
于 2012-10-21T13:28:40.613 に答える