我试图将 argv[1] 转换为浮点值,但最终出现编译错误。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works
double circleArea = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not
return 0;
}`
为什么第一个语句可以编译而第二个语句不能编译?不应该(double) argv[1]
与 atof(argv[1])
一样有效?我希望能够用普通的 C 而不是 C++ 来完成此操作。
更新:这些是我收到的错误:
circleArea.c: In function ‘main’:
circleArea.c:9:2: error: pointer value used where a floating point value was expected
double area = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not
^~~~~~
circleArea.c:9:2: error: pointer value used where a floating point value was expected
最佳答案
您看到的问题与转换/转换有关。在第二行中 - 您收到错误的地方 - 您需要将字符串转换为 double
,但您不是 - 您只是转换该值,即“告诉编译器您拥有的内容是double
”,但不是。
在 C 中,类似类型的转换工作 - int
到 float
、short
到 double
、 float
到 long
,char
到 int
。当然,您可能会在某些转换中失去精度。但是,例如,您不能将 int []
转换为 int
(实际上,您可以,但肯定会得到意想不到的结果),因为它是一个数组,并且另一个是单个变量。
要使其正常工作,您应该使用 atod
函数。检查this post了解详情。
关于char *argv[] 到普通 C 中的浮点类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929333/