C Funktion Parameter definieren

kika1116

Grünschnabel
Hallo,
hier ist die Aufgabestellung:

Bei den ICEs müssen die Achsen kontrolliert werden. Schreiben Sie eine Funktion zugwechsel()mit folgenden Parametern:

zug: Bei dem die Daten geändert werden müssen
art: String für die neue „Art“ des Zuges
verspaetung: Zeit, die der neue Zug später ankommen wird (Typ ZEIT)
plaetze: Neue Anzahl der Plätze

Ändern Sie die Daten des Parameter zug wie folgt:
art und plaetze werden überschrieben
verspaetung wird auf die ankunft Zeit aufaddiert.


Ich kann nicht sehr verstehen, was bei zug gemeint ist, dass die Daten geändert werden müssen. Bedeutet das, dass ich eine struktur brauche. Und dann die zweite Teil von der Aufgabe, mit der Überschreibung von Parameter, bin nicht sehr sicher, ob ich es richtig mache. Hier ist meine Code:

Hier ist meine Code:

C:
void zugwechsel() {
    struct {
    char art;
    typedef char ZEIT;
    ZEIT verspaetung;
    int plaetze;
    } zug;

    zug.art;
    zug.plaetze;
    char ankunft;
    zug.verspaetung *= ankunft;
}
 

cwriter

Erfahrenes Mitglied
Ich kann nicht sehr verstehen, was bei zug gemeint ist, dass die Daten geändert werden müssen.
Das müsste aus der Aufgabenstellung oder anderen Teilaufgaben bekannt sein.
mit der Überschreibung von Parameter, bin nicht sehr sicher, ob ich es richtig mache.
Deine Funktion hat ja gar keine Parameter? Siehe:
Schreiben Sie eine Funktion zugwechsel()mit folgenden Parametern:

Gruss
cwriter
 

kika1116

Grünschnabel
Ich habe es so verändert. Irgendwelche Bemerkungen?


C:
struct zug{
    char art;
    int plaetze;
    ZEIT verspaetung;
};
typedef char ZEIT;
void zugwechsel(struct zug * ptr, char art, int plaezte,ZEIT verspaetung ) {
  
    char ankunft;
    (*ptr).art;
    (*ptr).plaetze;
    (*ptr).verspaetung += ankunft;
}
 

sheel

I love Asm
Hi

ja, einige:

Zuerst, das typedef sollte vor struct zug sein, da es drin schon verwendet wird (also nicht danach, und auch nicht drin, sondern davor).

Bist du dir sicher, dass ZEIT ein char sein soll? Kann ja sein, dass es mit dem Lehrer so besprochen wurde, aber wirklich Sinn macht das für mich nicht. Was das sein könnte wäre a) ein Timestamp (Sekunden seit 1970 wie üblich, aber in einem anderen Variablentyp, weil das in char nicht reinpasst), oder eine weitere struct ZEIT mit zB. stunden und minuten drin

Die ZEIT-Variable in zug sollte laut Aufgabe ankunft heißen, nicht verspaetung (und wrum ZEIT komplett großgeschrieben?)

Die Parameter von zugwechsel sind in Ordnung, aber: Man könnte den Pointer auch weglassen und dafür mit return später den geänderten Zug zurückgeben. (Ist auch je nach Fall "angenehmer" zu verwenden - zB. eine Funktion, die ein int nimmt, kann Werte wie 1 oder eben int-Variablen übergeben bekommen. Wenn ein int-Pointer verlangt ist können es nur Variablen sein.)

Die erste Zeile in zugwechsel (ankunft) macht keinen Sinn, wofür soll das da gut sein? Und da es nirgends einen Wert herbekommt darf es später in der Addition auch nicht verwendet werden (Compilerwarnugnen anschauen hilft sehr - auch wenn es "Warnungen" sind deuten sie oft auch Fehler hin. Das hier ist einer.).

Die nächsten zwei Zeilen tun nicht wirklich was - du solltest da die Werte von den Parametern zuweisen
Code:
(*ptr).art = art;
Das Selbe für plaetze.

Und in der letzten Zeile, wie schon erwähnt sind die Namen da verkehrt.