我在将字符串转换为double时遇到问题。请帮帮我。
这是我的代码:
char Price[100];
double newPrice;
printf("\nPlease enter the price:");
fgets(Price,100,stdin);
newPrice = atof (Price);
printf("\nPrice of item is %f",newPrice);
在使用diff文件运行时,它会提供diff输出。
file1(方法1):
char Price[100];
double newPrice;
int main()
{
myval();
return 0;
}
myval()
{
printf("\nPlease enter the price:");
fgets(Price, 100, stdin);
newPrice = atof(Price);
printf("\nPrice of item is %f", newPrice);
}
file2(方法2)
#define MAX 50
char oldPrice[MAX];
double newPrice;
int main()
{
UserInput();
}
int UserInput()
{
printf("\nPlease enter the price:");
fgets(oldPrice, MAX, stdin);
newPrice = atof(oldPrice);
printf("\nPrice of item is %f", newPrice);
return 0;
}
上述两种方法是使用tcc(tiny Compiler)编译的。两种方法都是相同的,但我得到这两种方法的差异输出。 输出1:
D:\>new.exe
Please enter the price:12.3
Price of item is 12.300000
输出2:
D:\>t.exe
Please enter the price:12.3
Price of item is 7735248.000000
答案 0 :(得分:1)
您必须包含<stdlib.h>
才能获得atof
的正确原型:
double atof(const char *);
有了这个,行为就像预期的那样。 (我估计你把它包含在第一个片段中,但不是第二个片段。)
编译器应警告您使用没有原型的函数。在C89中使用不带原型的函数是合法的,但编译器将假定返回值为int
。使用type-unaware printf
来表示这个值似乎导致奇怪的输出。
在C99和更新的标准中,使用没有原型的功能是非法的。因此,如果您的编译器支持,我建议至少使用C99。至少,打开编译器警告。
答案 1 :(得分:0)