struct an funktion übergeben



  • Hi

    Wie kann ich die untere Rechnung in eine Funktion packen
    und ihm die eingelesenen Werte (scanf) übergeben damit er rechnen kann ?
    Ist bestimmt simple,..nur ich komm nicht drauf.

    Macht man bestimmt mit Zeigern. Ich hab das aber bis heute noch nicht so ganz kappiert. wäre nett wenn mir jemand helfen könnte...

    #include <stdio.h>
    #include <stdlib.h>
    
              struct zeit{
                int h;
                int m;
                int s;
                }zeitar[3];
    
    int main(int argc, char *argv[])
    {
    printf("Geben sie die Uhrzeit 1 in Form HH.MM.SS ein\n");
    scanf("%d.%d.%d",&zeitar[1].h,&zeitar[1].m,&zeitar[1].s);
    printf("Geben sie die Uhrzeit 2 in Form HH.MM.SS ein\n");
    scanf("%d.%d.%d",&zeitar[2].h,&zeitar[2].m,&zeitar[2].s);
    
    //Das hier in eine Funktion!
    zeitar[3].h=zeitar[1].h-zeitar[2].h;
    zeitar[3].m=zeitar[1].m-zeitar[2].m;
    zeitar[3].s=zeitar[1].s-zeitar[2].s;
    //-------------------------------
    
    printf("Die Differenz %d:%d:%d ",zeitar[3].h,zeitar[3].m,zeitar[3].s);
      system("PAUSE");
      return 0;
    }
    


  • 1. Auf ein array greift man allgemein so zu:

    DATENTYP name[3];
    
    name[0];
    name[1];
    name[2];
    
    name[3]; // Nicht mehr erlaubt. Du greifst auf das sog. Nirvana zu...
    

    2. Um das in eine Funtion zu packen braucht man nicht unbedingt Pointer:

    struct zeit calc(struct zeit t1, struct zeit t2)
    {
            struct zeit result;
            result.h=t1.h-t2.h;
            result.m=t1.m-t2.m;
            result.s=t1.s-t2.s;
            return result;
    }
    

    Aufruf dann:

    zeitar[2]=calc(zeitar[0],zeitar[1]);
    

    Edit: Noch was. Es ist ja löblich, dass du Codetags verwendet hast, aber sinnvoller wären C/C++ Codetags gewesen 😉



  • DANKE!

    wie könnte man das mit Pointern machen?
    diese variante würde mich auch sehr interessieren

    PS. das mitm array ist eigentlich klar 🙂



  • ThaMubber schrieb:

    wie könnte man das mit Pointern machen?
    diese variante würde mich auch sehr interessieren

    Z.B. so:

    struct zeit calc(struct zeit * t1, struct zeit * t2)
    {
            struct zeit result;
            result.h=t1->h - t2->h;
            result.m=t1->m - t2->m;
            result.s=t1->s - t2->s;
            return result;
    }
    

    Aufruf dazu:

    zeitar[2]=calc(&zeitar[0],&zeitar[1]);
    

    Oder, wenn die Funktion nichts zurückgeben soll:

    void calc(struct zeit * t1, struct zeit * t2, struct zeit * result)
    {
            result->h=t1->h - t2->h;
            result->m=t1->m - t2->m;
            result->s=t1->s - t2->s;
    }
    

    Und der Aufruf dazu:

    calc(&zeitar[0],&zeitar[1],&zeitar[2]);
    

Anmelden zum Antworten