我创建了一个通过命令行2变量输入的程序。
如果输入为5 15,则输出应为:
0.00 15.00 30.00 45.00 60.00
1.00 0.97 0.87 0.71 0.50
然而,在命令提示符中,每当我输入5 15时,我都会得到:
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
这是我的代码:
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
char buff[256];
double length;
double stepSize;
double cosValue;
double val = PI / 180.0;
double i;
int main(int argc, char *argv[]) {
length = atof(argv[1]);
stepSize = atof(argv[2]);
for (i = 0; i < length; i++) {
double stepSizeEdit = stepSize * i;
printf("%.2lf ", stepSizeEdit);
}
printf("\n");
for (i = 0; i < length; i++) {
double stepSizeEdit = stepSize * i;
cosValue = cos(stepSizeEdit * val);
printf("%.2lf ", cosValue);
}
}
接受命令行参数的部分是:
length = atof(argv[1]);
stepSize = atof(argv[2]);
这里我将argv值从字符串转换为双精度,这是不正确的?
答案 0 :(得分:6)
在尝试编译代码时,我收到以下警告:
test.c:15:11: warning: implicit declaration of function 'atof' is invalid in C99
[-Wimplicit-function-declaration]
length = atof(argv[1]);
此implicit declaration
指出了您的问题。您没有包含stdlib.h
包含它,您的程序将起作用。
如果没有include,则隐式声明函数atof()
。
当GCC没有找到声明时(如果你不包含所需的标题就是这种情况),它会假定这个隐式声明:int atof()
;,这意味着该函数可以接收任何你给它,并返回一个整数。
在较新的C标准(C99,C11)中,这被视为错误(隐式声明)。但是,默认情况下,gcc没有实现这些标准,因此您仍然会收到旧标准的警告(我猜想您正在使用这些标准)。
为了更好地发现这些错误,我建议你打开并阅读编译器警告。您还应该阅读此link以了解它们。
正如@JonathanLeffler指出的那样,你也应该避免使用全局变量:)。