2016-05-17 3 views
-3

私は4つの異なる関数でこのコードを書いています。その主な目的は角度0〜90のテーブルに表示することです。角度、時間、速度の距離です。速度はユーザから入力される。 しかし、関数を作成しているvoid関数を呼び出すと、「create_table 'への未定義の参照」エラーが発生します。これは私のコードです。Cの空関数を呼び出す方法

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

#define G 9.8 /* gravitation acceleration 9.8 m/s^2 */ 
#define PI 3.141592654 

void create_table(double v); 
double Projectile_travel_time(double a, double v); 
double Projectile_travel_distance(double a, double v); 
double degree_to_radian(double d); 

int main(void) 
{ 
    int n; 
    double velocity; 

    printf ("please enter the velocity at which the projectile is launched (m/sec): "); 
    n = scanf("%lf" ,&velocity); 

    if(n != 1) 
    { 
     printf("Invlid input. Bye..."); 
     exit(1); 
    } 

    while (velocity < 0) 
    { 
     printf ("please enter a positive number for velocity: "); 
     n = scanf("%lf", &velocity); 
     if(n != 1) 
     { 
      printf("Invlid input. Bye..."); 
      exit(1); 
     } 
    } 
    create_table(velocity); 


    return 0; 
} 
    void create_table(double v) 
    { 
     printf("Angle  t  d\n"); 
     printf("(deg) (sec) (m)\n"); 

     double a,i; 
     for(a=0; a<=90; a+=5) 
     { 
      for(i=0; i<=2; i++) 
      { 
       double t = Projectile_travel_time(a, v); 
       double s = Projectile_travel_distance(a, v); 
       printf("%d  %d  %d\n", a, t, s); 

      } 
     } 


    } 
    double Projectile_travel_time(double a, double v) 
    { 
     double t = ((2*v*sin(degree_to_radian(a)))/(G)); 
     return t; 
    } 
    double Projectile_travel_distance(double a, double v) 
    { 
     double d = ((v*v)/G)*sin(2*degree_to_radian(a)); 
     return d; 
    } 

    double degree_to_radian(double d) 
    { 
     double r = d*atan(1) * 4/180; 
     return r; 
    } 

助けていただければ幸いです。 おかげ

編集私は、コードを編集しているが、今、私の出力は完全にオフされた状態で、別の問題が発生しています。どのように私の機能が間違っているか提案?

+1

メイン以外の機能を定義する必要があります。 – jboockmann

答えて

1

あなたはあなたがmainのうち、関数定義を移動する必要がある主な機能

+0

ありがとう!しかし、今は完全に間違った数字になっています。私の機能に何が間違っているのでしょうか? – user3531022

+0

いいえ、私はそれが問題だとは思っていません。なぜなら、速度はユーザーが入力したとおりに書き込まれるからです。 – user3531022

+0

あなたはコードをもっと読みやすくすることができます。例えば、ラジアン度は(度/ pi)* 180 http://stackoverflow.com/questions/14920675/is-there-a-function-in-c-language-to-calculate-degrees-radians #include インラインdouble to_degrees(ダブルラジアン){ return radians *(180.0/M_PI); } :) powについては、Math.powなどを使用できます。 – xxxvodnikxxx

1

の外を作成する機能を維持する必要があります。 Cはnested functionsをサポートしていません。

編集:つまり、GCCにありますが、移植性がありません。

+0

ありがとうございました!しかし、今は完全に間違った数字になっています。私の機能に何が間違っているのでしょうか? – user3531022

+1

それらをデバッグしてください。見つからない場合は、理解していない部分だけに焦点を当てて新しい質問をしてください。 – harald

+0

ありがとう、あなたはなぜ私は5をインクリメントしてもforループで知っていますが、一度私はすべての19回の0を得るための値を印刷します。 – user3531022

1

主な外あなたの関数を実装してみてください()

+0

ありがとう!しかし、今は完全に間違った数字になっています。私の機能に何が間違っているのでしょうか? – user3531022

+0

バインドされた値をチェックし、入力値と期待される出力値をここに貼り付けてみてください。 – sameerkn

+0

ベロシティは初期化されておらず、ローカル変数であるため、すべてのガベージ番号を含むことができるため、ベロシティはパラメータとして使用します。 –

0

は、メインの外に、すべての機能がcreate_tableを画成書くProjectile_travel_timeProjectile_travel_distancedegree_to_radian

create_tableを呼び出している時点で、create_tableという定義が見つかりません。

1

コードを編集しましたが、出力が完全にオフになっているという別の問題が発生しました。

printf("%lf  %lf  %lf\n", a, t, s); 

変更

printf("%d  %d  %d\n", a, t, s); 

あなたはすべての値を揃えるために%7.3fを使用することができます。

関連する問題