scanf Zeichenkette und in int umwandeln

Neue Frage »

Auf diesen Beitrag antworten »
Lycaner scanf Zeichenkette und in int umwandeln

#include <stdio.h>

int main (void) {
int Matrikelnummer, MatNr,i;
char Zeichenkette[10];

scanf( "%s", Zeichenkette);


MatNr=(int)Zeichenkette[10];

while(0<MatNr){
Matrikelnummer=(MatNr%100)-48;
MatNr=MatNr/100;
printf("Martikelnummer ist %-i",Matrikelnummer);
}


return 0;
}



Aufgabenstellung, schreiben sie ein Programm, das eine Zahl(z.B. Matrikelnummer 6-Stellig) als Kette einliest und dann als Zahl ausgibt.

1. Problem ich weiß Nicht, wieso mein Cast-Operator falsch ist.
2. Problem ist, ich weiß nicht, wie ich die Zahlen dann in richtiger Reihenfolge ausgeben soll.
Ich habe Minus verwendet, aber ich weiß nicht, ob er die nächste Zahl davor oder dahinter schreiben wird.
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
#include <stdlib.h>
//...
MatNr=atoi(Zeichenkette);
printf("Martikelnummer ist %d",MatNr);

Ein char-Array lässt sich nicht einfach zum int casten, dazu braucht man eine spezielle Funktion.
Die Alternative ist strtol.
Was du mit der while-Schleife vorhast, erschließt sich mir nicht, Frage 2 kann ich also ohne weitere Erklärung nicht beantworten.
Auf diesen Beitrag antworten »
Lycaner

Mir while schleife wollte ich den Zahlencode(ich dachte es funktioniert mit einlesen) z.B.515049 wieder ins 321 umwandeln (515049%100=49, 49-48=1) dann 515049/100=5150(weil es ein int ist)
Und wenn ich es funktionieren würde, dann wären die Zahle nicht 321, sonder 123, also vertauscht(
Auf diesen Beitrag antworten »
eulerscheZahl

Meinst du so?
code:
1:
2:
3:
printf("Martikelnummer ist: ");
for(i = 0; Zeichenkette[i] != '\0' && i < 10; i++)
	printf("%d", Zeichenkette[i] - '0');
 
Auf diesen Beitrag antworten »
Lycaner

Genau das aber wieso funktioniert das? Ich dach die Zahlen in der Zeichenkette werden in ASCII_Code codiert.
Auf diesen Beitrag antworten »
eulerscheZahl

Das ist richtig:
Bsp.: Martikelnummer = 515049
ist 0x35, 0x31, 0x35, 0x30, 0x34, 0x39

diese Zeichen gehe ich eins nach dem anderen durch, ziehe jeweils '0' - also den ASCII-Wert von 0 (0x30) ab:
5, 1, 5, 0, 4, 9

die Zahlen kann ich dann als Ziffern ausgeben.

Ein string endet entweder mit '\0' (häufig ist auch einfach 0 zu lesen, da dieses ASCII-Zeichen auf 0x00 hinterlegt ist), oder wenn der Speicher zu Ende ist.
Daher die Abbruchbedingung der Schleife.
Auf diesen Beitrag antworten »
Lycaner

Das ist richtig gut.
Aber kannst du mir noch sagen, wieso du noch die && i<10 gesetzt hast? Ist es, damit es nur die Zahlen ausgibt und wenn man die Buchstaben in die Zeichenkette schreiben, wieso gibt er trotzdem eine Zahl aus? ( ich weiß, dass es der ASCII Code ist)
Auf diesen Beitrag antworten »
eulerscheZahl

Das i < 10 steht da, falls die Martikelnummer >=10 Zeichen hat:
Dann passt das string-Ende Zeichen nicht mehr in Zeichenkette und es wird das ausgegeben, was zufällig danach im Speicher kommt, bis irgendwann eine 0 kommt.

Wenn man Buchstaben schreibt:
z.B. 'a' = 97.
Hiervon wird '0', also 48 abgezogen. Macht 49. Ein Buchstabe gibt also 2 Ziffer, nicht gerade ideal smile

Bin dann mal weg.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »