如何在C中将String转换为Float

时间:2017-10-25 11:57:54

标签: c

我写了以下代码

#include <stdio.h>      
#include <stdlib.h> 
int main()

{
    // declaration of variables as strings
    char astr;
    char bstr;
    char cstr;

    /* Input three sides of a triangle */
    printf("Enter first side of triangle: ");
    scanf("%s",&astr);
    printf("Enter second side of triangle: ");
    scanf("%s",&bstr);
    printf("Enter third side of triangle: ");
    scanf("%s",&cstr);

    // conversion of strings to float
    float a = atof(&astr);
    float b = atof(&bstr);
    float c = atof(&cstr);
    // checking if given triangle is valid
    if((a + b > c) && (a + c > b) && (b + c > a))
    {
       // Checking for special cases of triangle

        if(a==b && b==c)
        {
            /* If all sides are equal */
            printf("Equilateral triangle.");
        }
        else if(a==b || a==c || b==c)
        {
            /* If any two sides are equal */
            printf("Isosceles triangle.");
        }
        else
        {
            /* If none sides are equal */
            printf("Scalene triangle.");
        }
    }
    else
    {
        printf("Triangle is not valid. \n");
    }

    printf("%f \n", a);
    printf("%f \n", b);
    printf("%f \n" ,c);
    return 0;
}

然而,当我运行它时,我得到&#34;三角形无效&#34;尽管在数学上三角形是有效的

当打印存储在b和c中的值时,我发现只有c的值被正确存储,但a和b总是0.000000

我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:2)

而不是3条错误的行:

char astr;
scanf("%s",&astr);
float a = atof(&astr);

让我提出工作方针:

char astr[20];  // should be enough
scanf("%19s",astr);  // 19 protects from buffer overflow on astr
float a = atof(astr);

首先,您无法将字符串扫描到char:没有足够的空间/未定义的行为。传递一个char 数组(在这种情况下删除&,它已经是一个地址)

其次,将字符串传递给atof,而不是字符串上的指针。

除此之外:atof不会检查错误,最好使用提供(可选)错误检查的strtof

答案 1 :(得分:-1)

int main () {
float val;
char str[10];
strcpy(str, "1234");
val = atof(str);
printf("%f", val);
return 0;
}

你也可以使用stofod()参考atof()的手册页