我写了以下代码
#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
我做错了什么?
提前致谢
答案 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()的手册页