Zahl in Ziffern zerlegen und abspeichern.
-
@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.
-
for (init-statement; condition; expression) statement
ist äquivalent zu
{ init-statement while (condition) { statement expression; } }
Da muss es keine "Schleifenvariable" geben. Da muss sich nichts erhöhen. Wenn da kein Statement ist das irgendeine Variable inkrementiert dann wird auch nirgends eine Variable inkrementiert. Klarer?
init-statement, condition und expression sind optional. Unabhängig voneinander. Gibt es keine condition, dann wird dafür
true
angenommen, unabhängig von init-statement und expression. Und@Swordfish sagte in Zahl in Ziffern zerlegen und abspeichern.:
Gibt es kein init-statement dann gibt es kein init-statement. Gibt es keine expression dann gibt es keine expression.
@Wutz sagte in Zahl in Ziffern zerlegen und abspeichern.:
#include <stdio.h> int main() { int i, new = 1234; int array[1000]; for (i = 0; /* true */; i++) // i bekommt den wert 0 zugewiesen, die for-Schleife laeuft solange true // und das Statement i++ wird nach jedem Schleifendurchlauf ausgefuehrt. { array[i] = new % 10; if (new /= 10) continue; else break; } for (; i > -1; i--) // i hat den Wert den es eben vor Schleifeneintritt hatte. Da steht nirgends // dasz sich dieser Wert bei Schleifeneintritt aendert. // i-- wird nach jedem Schleifendurchlauf ausgefuehrt. printf("%d", array[i]); return 0; }
-
@Swordfish AHHH jetzt JAAAA!
-
@Swordfish Super erklärt, danke.
Gibt es eigentlich eine Möglichkeit, mit einem Funktionsaufruf, die Ziffernlänge einer Zahl zu bestimmen?
Ich stelle mir sowas vor:
int ziffer = 12345 int n= tollerziffernlängenrechner ( ziffer)
....Wahrscheinlich gibt es sowas nicht, gel?