C 当用户输入双精度值时给出错误

C 当用户输入双精度值时给出错误,c,C,我写了一个决定三角形类型的程序。当用户输入一个字符串时,它会给出一个错误。我想给出双输入的错误。为了做到这一点,我尝试了这个 else if (s1[i] == '.') { found_double = 1; break; 但是程序也将识别为字符串。我怎样才能解决这个问题?完整代码如下 /* * HW3-3.c * * Created on: Oct 21, 2012 * Author: mert */

我写了一个决定三角形类型的程序。当用户输入一个字符串时,它会给出一个错误。我想给出双输入的错误。为了做到这一点,我尝试了这个

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);
  }
/*
*HW3-3.c
*
*创建日期:2012年10月21日
*作者:默特
*/
#包括
#包括
void checkTriangle(char*s1、char*s2、char*s3)
{
int i;
int-found_-double=0;
int发现字母=0;
int len=strlen(s1);
int len2=strlen(s2);
int len3=strlen(s3);
对于(i=0;i'9')
{
found_letter=1;//此变量用作布尔值
打破
}else如果(s1[i]='.')){
发现双=1;
打破
}
}
对于(i=0;i'9')
{
found_letter=1;//此变量用作布尔值
打破
}如果(s2[i]='.'),则为else{
发现双=1;
打破
}
}
对于(i=0;i'9')
{
found_letter=1;//此变量用作布尔值
打破
}else如果(s3[i]='.')){
发现双=1;
打破
}
}
如果(find_letter)//值0表示false,则任何其他值表示true
printf(“请输入一个整数而不是字符串。”);
否则如果(找到双精度)
printf(“请输入整数而不是双精度。”);
其他的
{
int side1=atoi(s1);
int side2=atoi(s2);
int side3=atoi(s3);
如果((side1+side2>side3&&side1+side3>side2&&side2+side3>side1)&&(side1>0&&side2>0&&side3>0))
{
//根据给定的输入决定三角形的类型。
if(side1==side2&&side2==side3)
printf(“等边三角形”);
else if(side1==side2 | | side2==side3 | | side1==side3)
printf(“等腰三角形”);
其他的
printf(“不等边三角形”);
}
其他的
printf(“\n无法形成链接。”);
}
}
内部主(空)
{
字符s[32],s2[32],s3[32];
printf(“请输入三角形的边”);
printf(“\n请输入第1面:”);
获取(s);
printf(“请输入第2面:”);
获取(s2);
printf(“请输入第3面:”);
获取(s3);
方格三角形(s、s2、s3);
}
  • s1是一个字符*,因此“.”应该是一个字符串(用您的话来说)
  • “.”的值小于“0”(或可能大于“9”),因此您将输入第一个if并跳过else if

  • 您可以更改IF的顺序

     if (s1[i] == '.')
     {
           //code here
     }
     else if(s1[i] < '0' || s1[i] > '9')
     {
         //code here
     }
    
    不要使用
    get()
    !使用
    fgets(s,sizeof(s),stdin)
    并(如有必要)处理
    fgets()保留和
    get()丢弃的换行符。使用
    gets()
    是一场安全灾难;它已经从标准的C 2011库中删除了(尽管遗憾的是,它将作为一个万年的扩展出现在库中)。忘记存在的
    get()
    。在我的书中,
    gets()
    的唯一安全实现是
    char*gets(char*s){abort();}
    。你应该把它当作是实现。
      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');