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

+0

私は歴史的な理由でコメントすることはできませんが、それを呼び出すために使用する名前に基づいていろいろなことをするbusyboxのようなプログラムにとっては有益です。 –

3

argvは次のようになりますプログラム、起動するために使用する引数であることを、忘れないでください:あなたは、その配列、argv[0]の最初の要素にアクセスするとき、あなたは以下にアクセスしている、だから、

/path/to/my/exec value 

を:

:あなたが本当に必要なもの

/path/to/my/exec 

はこれを含める必要があり、配列、argv[1]の2番目の要素であり、 210

value 
関連する問題