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 interessierenPS. das mitm array ist eigentlich klar
-
ThaMubber schrieb:
wie könnte man das mit Pointern machen?
diese variante würde mich auch sehr interessierenZ.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]);