2 Arrays und 2 Schleifen
-
#include <stdio.h> #include <stdlib.h> int main(void){ int *a = malloc(5*sizeof(*a)); int *b = malloc(5*sizeof(*b)); unsigned int i; unsigned int j; for(i=0;i<=4;i++){ *(a+i)=i+1; printf("%d ", *(a+i)); } printf("\n"); for(j=4;j<=0;j++){ *(b+5-j) = *(a+j-1); printf("%d #", *(b+5-j)); } printf("\n"); return 0; }
Ich will den Array Inhalt von a rückwärts in b kopieren, beim testen der Konsolen ausgabe merke ich dann aber das anscheind gar nichts drin steht!
Kann mir vllt jemand sagen wo mein Fehler in der 2. Schleife ist?!
-
for(j=4;j<=0;j++)
Da j mit 4 initialisiert wird, die Schleife aber laufen soll, solange j kleine/gleich 0 ist, wird der Schleifenkörper gar nicht ausgeführt.
-
immer noch nichts, tut mir leid, auch wenn ich
for(j=4;j<=0;j--)
[code="c"]
schreibe, ist die zeile leer
-
verzeihung, hatte dich falsch verstanden, habe es nun hinbekommen! danke
for(j=5;j>0;j--)
-
Ist ja auch immer noch falsch. Nochmal ganz genau erklärt: Deine Bedingung ist "mache weiter, solange j kleiner gleich 0 ist". Wenn du j mit 4 initialisierst, ist j nun mal nicht kleiner gleich 0. Also wird deine Schleife nicht ausgeführt, da deine Bedingung sofort greift.
EDIT: Ach, hast es ja schon.
-
KanakAttack schrieb:
verzeihung, hatte dich falsch verstanden, habe es nun hinbekommen! danke
for(j=5;j>0;j--)
immer noch falsch
-
Stimmt, du willst ja von 4 bis 0 laufen. Im Moment läufst du von 5 bis 1.
-
ja das weiß ich ^^ die rechnung geht
for(j=5;j>0;j--){ *(b+5-j) = *(a+j-1); }
glaube aber das die +5 da nicht so ganz korrekt sind, laufen tut es aber
-
KanakAttack schrieb:
glaube aber das die +5 da nicht so ganz korrekt sind, laufen tut es aber
-
man könnte auch einfach begründen warum es falsch ist und es richtig zeigen anstatt mit idiotischen videos witzig sein zu wollen
herr moderator
-
Ich hatte die Hoffnung, dass du selber im Zahlenraum bis 5 rechnen kannst und wollte dich daher auf den Fehler in deiner Einstellung "läuft = richtig"* oder gar "läuft = gut" hinweisen. Das heißt, dass du selber nachvollziehen sollst (besonders in diesem einfachen Fall), ob und warum ein Programm richtig funktioniert, anstatt einfach wild herum zu probieren. Letzteres wird nämlich in der Regel nicht funktionieren. Anscheinend war diese Einschätzung falsch
.
*: Es ist übrigens technisch richtig, bloß ziemlich unschön.
-
Also ich fand das Video passend. "läuft" bei Indexgrenzen fühlt sich gelegentlich so an. Hat ja nur ein halber Zentimeter gefehlt. Sortiert korrekt bis auf manchmal ein Element.
Hatte
for(j=5;j>0;j--){ *(b+5-j) = *(a+j-1); }
aber auch als Scherz aufgefaßt.
#include <stdio.h> #include <stdlib.h> int main(void) { int *a = malloc(5*sizeof(*a)); int *b = malloc(5*sizeof(*b)); unsigned int i; unsigned int j; for(i=0; i<5; i++) a[i]=i+1; for(i=0; i<5; i++) printf("%d ", a[i]); printf("\n"); for(i=0; i<5; i++) b[i]=a[5-1-i]; for(i=0; i<5; i++) printf("%d ", b[i]); printf("\n"); return 0; }
-
danke! jetzt hab ich was dazu gelernt
-
Belli schrieb:
for(j=4;j<=0;j++)
Da j mit 4 initialisiert wird, die Schleife aber laufen soll, solange j kleine/gleich 0 ist, wird der Schleifenkörper gar nicht ausgeführt.
Zudem sollte man bedenken, wenn man mit einer Zählschleife absteigend bis 0 zählen will, dass man als Datentyp für die Zählervariable NICHT UNSIGNED nimmt, denn UNSIGNED wird niemals < 0.
Die Schleife würde dann zur Endlosschleife verkommen, und falls man mit dem Zähler ein Array beackert, wird es wohl deftig rauchen.