2016-10-14 8 views
0

私は現在、クラスのCでトップダウンプログラミングについて学んでいます。Cプログラミング、トップダウン、出発時刻

私はこのプログラミング演習で、誰かが到着時間(およびkm /時とkmでの速度)に応じて出発する必要があるときに計算しなければならないが、間違っているのは、出力が約400万ぐらいだからです。

私はCで問題解決とプログラム設計を使用しており、関連する章は3.5です。私が間違ったことを誰かに教えてもらえますか?また、ELI5のような形式で正式なパラメータがどのように機能するかを説明することができますか?

#include <stdio.h> 
#define MINUTES_IN_HOUR 60 

int find_dprt_time(int diffhrs, int diffmin, int arvl_time, int trvl_time); 
double find_trvl_time(int trvl_time, int distance, int speed, double result); 

int main() 
{ 
    double distance; 
    int time, 
     speed, 
     diffmin, 
     diffhrs; 

    printf("Enter the time you need to arrive in military time:\n"); 
    scanf("%d",&time); 
    printf("Enter the distance to your destination in kilometers:\n"); 
    scanf("%lf",&distance); 
    printf("Enter the speed you plan to average in km/hr:\n"); 
    scanf("%d",&speed); 

    printf("Your departure time is %d%d.\n",diffhrs,diffmin); 

    return 0; 
} 

int find_dprt_time(int diffhrs, int diffmin, int arvl_time, int trvl_time) 
{ 

    diffhrs = arvl_time/100 - trvl_time/100; 
    diffmin = arvl_time % 100 - trvl_time % 100; 

    return (diffhrs, diffmin); 
} 

double find_trvl_time(int trvl_time, int distance, int speed, double result) 
{ 

    result = distance/speed; 
    trvl_time = MINUTES_IN_HOUR * result; 

    return (trvl_time); 
} 
+0

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

+0

計算関数を決して呼び出さないので、初期化されていない変数 'diffhrs'と' diffmin'にランダムなガーベッジがあります。 – Robert

答えて

0

あなたreturn (diffhrs, diffmin)文は、特に何も有効ではありません - それだけで(the comma operator in Cをよく読んで)diffhrsを破棄し、diffminを返します。

変更:

return (diffhrs, diffmin); 

へ:

return diffhrs * 100 + diffmin; 
+0

ありがとうと、デバッグリンクに感謝します!私はdiffhrsとdiffminをmainのdprt_timeに変更しましたが、find_dprt_timeのreturn文の結果がmainのdprt_timeに終了するようにする方法はありますか? –

+0

あなたは* find_dprt_timeを呼び出す必要があります - Cの呼び出し関数を読み、パラメータを渡す方法。 –

0

ようこそプログラミングには:)

あなたの関数を呼び出すのを忘れていました。したがって、初期化されていない変数が表示されています。これにより、ゴミ値が表示されるか、クラッシュする可能性があります。 this questionを参照してください。

宣言中に変数を初期化することをお勧めします。 Like:

int diffhrs = 0; 
int diffmin = 0; 

あなたの機能を呼び出すようにしてください。彼らは少し微調整が必​​要かもしれません。やってみて。それが学ぶ方法です。

また、引数を参照渡ししようとしているようです。あなたはそれを少し変更する必要があります。

このような関数を定義します。

int find_dprt_time(int *diffhrs, int *diffmin, int arvl_time, int trvl_time) 
{ 
    *diffhrs = arvl_time/100 - trvl_time/100; 
    *diffmin = arvl_time % 100 - trvl_time % 100; 
} 

は次のように出発時刻を表示する前に関数を呼び出します。

find_dprt_time(&diffhrs, &diffmin, time, travel_time); 

あなたが参照hereによる関数と引数の受け渡しについての詳細を学ぶことができます。

関連する問題