Probleme mit dem Ändern von Werten in einem Struct



  • Ja, das lässt er durchgehen.

    Nur, auch wenn ich das return weglasse... Ändert er nur den Wert im struct group und nicht im struct teams.

    Deshalb stehe ich auf dem Schlauch.

    Das return teams,group; war nur von meinen letzten Versuchen das iwie anders hinzubekommen noch drin...

    Wieso übernimmt er denn nur die Werte vom struct group? Und nicht vom struct teams?



  • Mache aus

    void set_score(struct teams teams, struct group group[50],int i_game,int i_grp)
    

    ein

    void set_score(struct teams *teams, struct group group[50],int i_game,int i_grp)
    

    und übergebe die Adresse von teams mit &teams . Vielleicht klappte es ja dann schon.



  • Nicht nur vielleicht. Ganz sicher wird es klappen 😉



  • Und gewöhne dir mal an, deinen Variablen nicht den gleichen Namen zu geben, wie deinen Strukturen. 😉



  • Ich vermute einfach mal, dass es sich in C mit dem , wie in C++ verhält, das heißt er gibt immer das letzte Element zurück.



  • Also ich habe gerade nur den BCB6.0 am Wickel und der erlaubt zwar Kommata bei return-Kommandos, aber nicht, wenn die Funktion einen Rückgabewert "void" hat, so wie im Beispiel des TE 😃



  • dirty little helper schrieb:

    Sowas hier sollte der Compiler eigentlich nicht durchgehen lassen 😉

    return teams,group;
    

    Ist das so? Evaluiert nicht teams,group zum Wert von group ?



  • Ja, aber macht das Sinn, sowas durchgehen zu lassen?
    Meines Erachtens nicht.



  • It0101 schrieb:

    Ja, aber macht das Sinn, sowas durchgehen zu lassen?
    Meines Erachtens nicht.

    Meines Erachtens nach gehört der ganze Kommaoperator in den Reißwolf. Aber wenn man ihn hat, dann bitte auch überall. Sonst würde die Sprache anfangen, unübersichtlich zu werden.

    Und nach

    #ifdef PERFORMANCELOG
    #define READ(x)(++readCount,x)
    #else
    #define READ(x)(x)
    #endif
    

    zum Ausmessen von Lese/Schreibzugriffen von Algorithmen, dann schreibt sucher auch jemand

    {
       return GET(arr[0]);
    

    und schon hätten wir den Salat, wenn der Kommaoperator im return verboten wäre.



  • It0101 schrieb:

    Ja, aber macht das Sinn, sowas durchgehen zu lassen?
    Meines Erachtens nicht.

    Du würdest also an der Syntax herumfrickeln, nur um den Komma-Operator in einem return zu verbieten? Dann wäre C eine B&D-Sprache.

    Macht es Sinn, sowas zu verbieten?

    if (i = 10) do_something();
    


  • mngbd schrieb:

    Dann wäre C eine B&D-Sprache.

    Was ist eine B&D-Sprache?



  • volkard schrieb:

    Meines Erachtens nach gehört der ganze Kommaoperator in den Reißwolf.

    Ich verwende ihn schon seit langem nur noch für sowas wie a++, b++ in for-Schleifen. Aber dort möchte ich ihn nicht vermissen, sonst müsste man im for-Kopf Blöcke erlauben.



  • volkard schrieb:

    Was ist eine B&D-Sprache?

    Ich hatte das hier im Hinterkopf:
    http://catb.org/jargon/html/B/bondage-and-discipline-language.html

    Aber sehr verbreitet ist der Ausdruck nicht.



  • mngbd schrieb:

    volkard schrieb:

    Meines Erachtens nach gehört der ganze Kommaoperator in den Reißwolf.

    Ich verwende ihn schon seit langem nur noch für sowas wie a++, b++ in for-Schleifen. Aber dort möchte ich ihn nicht vermissen, sonst müsste man im for-Kopf Blöcke erlauben.

    Stimmt, an der Stelle macht der Kommaoperator natürlich schon Sinn.
    Das Beispiel hatte ich nicht bedacht.

    Es würde aber auch ohne ihn gehen 😉 Gibt ja im Notfall auch noch andere schleifen 😃


Anmelden zum Antworten