2012-02-02 119 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