Integer -> Char -> ASCII
-
kleines Beispiel:
int main() { char tmp[11]; int i = 9; unsigned int a = 4114711471; tmp[10] = 0; do{ tmp[i--] = (a%10)+48 ; } while (a/=10); // tmp+i = Anfangsadresse des Strings }
-
tmp+i+1 == Anfangsadresse des Strings
-
mikey schrieb:
Musst du das von Hand schreiben können? Ansonsten gibt es die Funktion itoa ()
Welches nicht Standard-C ist.
-
balduin schrieb:
kleines Beispiel:
a/=10
sehr schön, vielen lieben dank! Das hab ich gesucht
Mich wundert das aber, da wir aber normal keine Bsp zum Üben bekommen, die Befehle brauchen die wir nicht kennen. Aber ne andere Lösung scheint es ja nicht zu geben.
Schöne Feiertage
Update:
Oh hehe... tut mir Leid, bin noch etwas sehr unerfahren
Also mit nur "/" anstelle von "/=" würd es ja auch gehen - ganze vergessen - es ist ja ein Int...
Was macht denn genau /= ?
-
a /= 10
ist das selbe wie
a = a / 10
Gruß
zeigerzeiger
-
Nur mit / würde es vermutlich nicht gehen -
x/=n;
ist eine Abkürzung fürx=x/n;
(das gibt's auch für etwa ein Dutzend weitere binäre Operatoren)
-
Oder die rekursive Variante:
void printd(unsigned long n) { unsigned long i; if (i = n / 10) printd(i); putchar(n % 10 + '0'); }
'0' ist meistens 48, aber es muss ja nicht sein.
-
Noch ne kurze Zwischenfrage da ich das so noch nie angewendet habe.
Foglendes Coding:
if (i = n / 10)
while (a/=10)
Aus welchem logischen Ansatz sind die Bedingungen denn wahr bzw. unwahr.
Bei Division werden doch nie "-" Werte erreicht, die dann nicht in einen unsigned int/long passen würden.Wie wird also hier entschieden ob die IF bzw. WHILE Bedingung wahr ist?
Danke
-
codefrag schrieb:
Wie wird also hier entschieden ob die IF bzw. WHILE Bedingung wahr ist?
Dankedo{ tmp[i--] = (a%10)+'0'; } while (a/=10);
a wird in der do-while Schleife nach jeder Division durch 10 kleiner (Ergebnis wird sofort zugewiesen und ausgewertet)
ist das Ergebnis der Division kleiner als 1 wird a == 0 (false),(weil unsigned int keine Nachkommastellen hat) und die Schleife
wird beendet.
mfg
-
Ragdar schrieb:
- ganze vergessen - es ist ja ein Int...
kann man berücksichtigen:
int main() { char tmp[12]; int i = 10; int a = -2064345332; char vorzeichen = 0; tmp[11] = 0; if (a < 0) { a = -a; vorzeichen = '-'; } do{ tmp[i--] = (a%10)+'0'; } while (a/=10); if (vorzeichen) tmp[i--] = vorzeichen; // tmp+i+1 == Anfangsadresse des Strings }
mfg
-
balduin schrieb:
a wird in der do-while Schleife nach jeder Division durch 10 kleiner (Ergebnis wird sofort zugewiesen und ausgewertet) ist das Ergebnis der Division kleiner als 1 wird a == 0 (false),(weil unsigned int keine Nachkommastellen hat) und die Schleife wird beendet.
Alles klar. Da laut Defintion FALSE = 0 ist ... dann isses logisch
Danke