2016-10-14 2 views
0

Ich lerne gerade in meiner Klasse über Top-Down-Programmierung in C, und ich kann irgendwie nicht den Dreh raus.C-Programmierung, Top-Down, Abfahrtszeit

Ich habe versucht, es durch diese Programmierung Übung zu lernen, wo Sie berechnen müssen, wenn jemand abhängig von ihrer Ankunftszeit (und Geschwindigkeit in km/h und Entfernung in km) verlassen sollte, aber ich habe etwas sehr, sehr getan falsch, da die Ausgabe irgendwo um vier Millionen liegt - immer.

Ich benutze das Buch Problemlösung und Programmdesign in C und das relevante Kapitel ist 3.5. Kann mir jemand sagen, was ich falsch gemacht habe? Kann jemand auch erklären, wie formale Parameter in einer Art ELI5 funktionieren?

#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

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

Sie rufen nie Ihre Berechnungsfunktionen auf, so dass Sie in den nicht initialisierten Variablen "diffhrs" und "diffmin" einen zufälligen Müll haben. – Robert

Antwort

0

Ihre return (diffhrs, diffmin) Aussage macht nichts besonders nützlich - es wirft nur diffhrs und gibt diffmin (lesen Sie auf the comma operator in C).

Wechsel:

return (diffhrs, diffmin); 

zu:

return diffhrs * 100 + diffmin; 
+0

Vielen Dank und vielen Dank für den Debugging-Link! Ich habe diffhrs und diffmin zu dprt_time in main geändert, aber wie stelle ich sicher, dass das Ergebnis der return-Anweisung von find_dprt_time in dprt_time in main endet? –

+0

Sie müssen * rufen * 'find_dprt_time' aufrufen - lesen Sie auf aufrufende Funktionen in C und wie Parameter übergeben werden. –

0

Willkommen bei Programmierung :)

Sie haben vergessen, Ihre Funktionen aufzurufen. Sie zeigen also nicht initialisierte Variablen an. Dies kann zu einigen Fehlern führen oder sogar zum Absturz führen. Siehe this question.

Es empfiehlt sich, Variablen während der Deklaration zu initialisieren. Wie:

int diffhrs = 0; 
int diffmin = 0; 

Versuchen Sie, Ihre Funktionen aufzurufen. Sie könnten einige kleine Feinabstimmungen erfordern. Versuch es. Das ist der Weg zu lernen.

Außerdem scheint es, als ob Sie versuchen, Argumente als Referenz zu übergeben. Sie sollten dafür kleine Änderungen vornehmen.

definieren Funktion wie folgt aus:

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; 
} 

Rufen Sie die Funktion vor der Abflugzeit wie folgt dargestellt:

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

Sie können mehr über Funktionen lernen und Übergeben von Argumenten durch Verweis here.

Verwandte Themen