2016-09-09 18 views
1

コマンドラインで2つの変数を入力するプログラムを作った。Cのコマンドライン入力

入力が5〜15だった場合、出力は次のようになります。私は、5〜15を入力したときに

0.00 15.00 30.00 45.00 60.00 
1.00 0.97 0.87 0.71 0.50 

ただし、コマンドプロンプトに私が取得:ここ

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値を文字列から倍精度に変換していますが、これは間違っていますか?

+2

デバッグを試しましたか?例えば'length'と' stepsize'を出力して、それらが期待値を含んでいるかどうかを調べます。 – John3136

+0

あなたは 'argv [1]'と 'arg [2]'の値の 'printf'出力やそれらに割り当てられた' length'と 'stepsize'の内容など、あなた自身でこれを理解しようと努力しましたか?デバッガでコードをステップ実行するのはどうですか?それはあなたに何を伝えるのですか? –

+0

Length = 0 stepSize = 0 – Orcka

答えて

6

コードをコンパイルしようとすると、私は次の警告を得る:あなたは、問題の方にこのimplicit declarationポイント

test.c:15:11: warning: implicit declaration of function 'atof' is invalid in C99 
     [-Wimplicit-function-declaration] 
     length = atof(argv[1]); 

を。あなたは含まれていませんstdlib.h それを含めるとあなたのプログラムは動作します。

含まれていないと、atof()は暗黙的に宣言されます。 GCCで宣言が見つからない場合(必要なヘッダーが含まれていない場合)、この暗黙の宣言が引き継がれます:int atof();これは、関数が与えたものを受け取り、整数を返します。

これは、新しいC標準(C99、C11)のエラー(暗黙の宣言)とみなされます。しかし、gccはデフォルトでこれらの標準を実装していないので、古い標準(私が想定しているもの)で警告を受け取ります。

この種のエラーを見つけ出すために、私はあなたの電源を入れ、コンパイラの警告を読むことをお勧めします。あなたはまた、それについて学ぶためにこれをlinkに与えるべきです。

@JonathanLefflerが指摘しているように、グローバル変数の使用も避けてください:)。

関連する問題