Zahl in Ziffern zerlegen und abspeichern.
-
@daniwe sagte in Zahl in Ziffern zerlegen und abspeichern.:
Sorry @Swordfish Ich verstehe nicht ganz - gibt es Fehler in meinem Code oder warum meinst du das ich den nicht ausführe?
Wir wissen das, weil der Code, den du hier gezeigt hast, eben nicht
4 46 234 1234
ausgibt, sondern
4 34 234 1234
Kann man einfach durch Copy&Paste hier sehen: https://ideone.com/3kdpff
Warum du den falschen Code ausführst: Du wirst vermutlich irgendwo durcheinander gekommen sein, welches Programm wo liegt, oder welchen Code du wo übersetzt hast. Vielleicht hast du eine frühere Testversion ausgeführt.
Dein Code klappt ja schonmal super , gibt es dazu auch die Möglichkeit die einzelnen Zahlen in einem Array abzuspeichern?
Er gibt die Ziffern einzeln aus, aber du darfst natürlich auch gerne etwas anderes tun, außer ausgeben.
-
@Swordfish sagte in Zahl in Ziffern zerlegen und abspeichern.:
Billiger:
so wird die zahl auch vorwärts ausgegeben ...
int main() { int n = 1234; char mem[64] = { 0 }, * p = mem + 63; do *--p = '0' + n % 10; //printf("%d\n", n % 10); while (n /= 10); printf (p); }
-
Tatsächlich...Also war mein Code zumindest nicht ganz so falsch. Ich habe Codeblocks in zwei verschieden Versionen. Beide liefern das falsche Ergebnis. Seltam.. Gibt es gute alternativen zu Codeblocks (sollten natürlich for free sein)?
Also ich habe leider keine Ahnung was @Swordfish da genau macht, deshalb fällt es mir schwer die ausgegeben Ziffern in einem Array zu speichern. While Schleifen sind mir schon ein Begriff, aber da habe ich einfach noch zu wenig Erfahrung.
Ich würde auf jedenfall eine Laufvariable und ein Array initalisieren, dann würde ich i (von 0 aus) in der do-while Schleife hochzählen lassen und die Werte in das Array schreiben lassen.
#include <stdio.h> int main() { int n = 1234; int i=0; int array [4]; do printf("%d\n", n % 10); while (n /= 10); i++; array [i] = n; }
naja.. ein Versuch war es Wert
-
@Bushmaster sagte in Zahl in Ziffern zerlegen und abspeichern.:
int n = 1234; char mem[64] = { 0 }, * p = mem + 63; do *--p = '0' + n % 10; //printf("%d\n", n % 10); while (n /= 10); printf (p);
Was soll der Schrott? UB.
-
@daniwe sagte in Zahl in Ziffern zerlegen und abspeichern.:
Gibt es gute alternativen zu Codeblocks (sollten natürlich for free sein)?
-
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
Was soll der Schrott?
ausprobieren, dann meckern, lieber freund.
-
@daniwe
Anfänger und alle Möchtegern-C-Profis sollen immer for benutzen und niemals while. So auch bei dir.#include <stdio.h> int main() { int i, new = 1234; int array[1000]; for(i=0;;i++) { array[i]=new%10; if(new/=10) continue; else break; } for(;i>-1;i--) /* array rückwärts ausgeben */ printf("%d",array[i]); return 0; }
-
@Bushmaster sagte in Zahl in Ziffern zerlegen und abspeichern.:
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
Was soll der Schrott?
ausprobieren, dann meckern, lieber freund.
Dorftrottel.
Du hast - wie immer - keine Ahnung wovon du redest. UB findet man niemals durch ausprobieren, wenn du den Standard verstanden hättest, würdest du merken, wie lächerlich naiv du hier sinnfrei mit deinem aufgeschnappten Halbwissen daherfaselst.
-
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
Dorftrottel.
Du hast - wie immer - keine Ahnung wovon du redest. UB findet man niemals durch ausprobieren, wenn du den Standard verstanden hättest, würdest du merken, wie lächerlich naiv du hier sinnfrei mit deinem aufgeschnappten Halbwissen daherfaselst.möchtest du mir nicht wenigstens sagen was dir an dem code nicht gefällt, lieber freund?
-
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
Anfänger und alle Möchtegern-C-Profis sollen immer for benutzen und niemals while.
sollen? lol
-
@Bushmaster
Getroffene Hunde heulen.
-
@Bushmaster
Wenn du hier länger dabei wärst und Ahnung von C-Programmierung hättest, wüsstest du, dass ich mich nie auf das Niveau von Stümpern wie dir herablasse und für ihren durchschaubaren Versuch, ihren Stümpercode zu korrigieren, ihnen auch noch die UBs aus dem Standard und dem Code raussuche.
-
@Wutz Vielen Dank, den Code habe ich gut verstanden!
@Bushmaster @Wutz, entspannt Euch, Ihr habt mir geholfen, das Ziel ist erreicht. Also lasset Frieden herrschen
-
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
Wenn du hier länger dabei wärst und Ahnung von C-Programmierung hättest, wüsstest du, das ich mich nie auf das Niveau von Stümpern wie dir herablasse und für ihren durchschaubaren Versuch, ihren Stümpercode zu korrigieren, ihnen auch noch die UBs aus dem Standard und dem Code raussuche.
du willst also nur stänkern? tztztz ....
-
@daniwe sagte in Zahl in Ziffern zerlegen und abspeichern.:
@Wutz Vielen Dank, den Code habe ich gut verstanden!
@Bushmaster @Wutz, entspannt Euch, Ihr habt mir geholfen, das Ziel ist erreicht. Also lasset Frieden herrschen
alles gut. hab den kerl jetzt geblockt.
wer while schleifen hasst, von dem kann man auch sonst nichts erwarten.
-
@Wutz Da ist nichts UB.
@Bushmaster Hässlich ist es trotzdem.
-
Hätte da noch eine Frage:
Wenn bei einer For- Schleife etwas nicht definiert wird:
Bsp von @Wutz
for (i=0; ;i++)
was steht zwischen den beiden ";"?
Weiter:
for(;i>-1;i--)
Hier fehlt ja quasi der Startwert. Oder nutz die For-Schleife den Startwert, der bereits in der vorausgegangen Schleife definiert wurde? Normalerweise müsste die Definition des Startwertes doch mit den { } eingeschlossen sein oder?
-
In einem
for
-Statementfor (init-statement; condition; expression) statement
sind alle drei Teile init-statement, condition und expression optional. Fehlt condition so wird
true
angenommen. Eine klassische Endlosschleife istfor (;;) // lies: for-ever ; // ein leeres controlled statement
die equivalent zu
while (true) ; // ein leeres controlled statement
ist.
Gibt es kein init-statement dann gibt es kein init-statement. Gibt es keine expression dann gibt es keine expression.
@daniwe sagte in Zahl in Ziffern zerlegen und abspeichern.:
Oder nutz die For-Schleife den Startwert, der bereits in der vorausgegangen Schleife definiert wurde? Normalerweise müsste die Definition des Startwertes doch mit den { } eingeschlossen sein oder?
Du hast noch eine etwas seltsame Vorstellung was dieses
for
-dingsti ist. Da ist nichts spezielles. Du würdest dich ja auch nicht fragen:// ... int i; { i = 42; } { i = 47; // "nutzt" dieser block dasselbe i wie der vorige block ... } // ...
... es gibt nur ein
i
.
// ps fun-time:
for (1337; 0xf02; 1002); // leetest for-l00p evar
ist genauso eine Endlosschleife. 1337 eben. ^^
-
@Swordfish Ich hab nicht nur eine komische Vorstellung von der for-Schleife, sondern garkeine!
Ich weiß schon, warum ich Maschinenbauer bin und kein Informatiker :-P.
Also, die Endlosschleife ist mir ein Begriff, soweit ich weiß wird diese dann mit dem "break" Befehl gestoppt.
So wie du es geschrieben hast verstehe ich nun:
for (frei ; frei ; frei ) ist das gleiche wie while(true)
ODER war es so gemeint, das
for (init-statement; frei ; expression) das gleiche ist wie while (true)?
Wie sieht es mit den anderen Fällen aus?
- for (frei; condition; expression)
bei welchem wert startet die Schleife? Ich meine, es muss ja ein Anfangswert angenommen werden.
- for (init-statement; condition; frei)
Wie erhöht sich das i beim nächsten Durchlauf, es ist ja nichts definiert?
SORRY, vllt stehe ich auf dem Schlauch, aber es ist auch schon spät.
-
@Swordfish sagte in Zahl in Ziffern zerlegen und abspeichern.:
Hässlich ist es trotzdem.
naja, ist halt so auf die schnelle entstanden.
vielleicht poste ich nachher eine version ganz ohne schleifen. denn bekommt das while-hasser-männchen einen herzinfarkt.