2012-02-02 123 views
6

好吧,所以我让这个程序帮助我完成作业,因为我想提高我的C专业知识。当我做“gcc file.c -lm”时,所有东西都编译得很好,但是当我在命令行中用一个数字作为参数运行它时,我的程序只返回70.0000。命令行输入工作不正确

#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 


double temp(double hour){ 
    double t = (3.14/12)*hour; 
    double c = cos((double)t); 
    double temp = 13 * c + 57; 
    return temp; 
} 

int main (int argc, char *argv[]){ 
    double temperature = temp((double)atol(argv[0])); 

    printf("%f\n", temperature); 
} 

回答

7

argv[0]可能是您的程序名称。我希望你想要argv[1]。检查出this tutorial快速和简单的解释。

除此之外,有没有你正在使用atol(3)和铸造double,而不是仅仅使用atof(3)它返回一个double直接原因?

+0

你知道为什么程序名始终是数组中的第一个变量吗?感谢您的教程呢! – Breedly 2012-02-29 03:25:50

+0

我无法对历史原因进行评论,但对于像busybox这样的程序来说,它确实有帮助,它根据用于调用它的名称执行不同的操作。 – 2012-02-29 04:09:59

3

记住,argv是用来启动程序的参数,它看起来是这样的:

/path/to/my/exec value 

所以,当你访问该阵列,argv[0]的第一个元素,您访问以下内容:

/path/to/my/exec 

你真正需要的是什么阵,argv[1]的第二个元素,它应该包含这样的:

value