Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » scanf Zeichenkette und in int umwandeln » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen scanf Zeichenkette und in int umwandeln
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

scanf Zeichenkette und in int umwandeln Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

#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.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Lycaner: 21.02.2013 15:34.

21.02.2013 15:27 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
21.02.2013 17:05 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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(
21.02.2013 17:16 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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


__________________
Syntax Highlighting fürs Board (Link)
21.02.2013 17:21 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Genau das aber wieso funktioniert das? Ich dach die Zahlen in der Zeichenkette werden in ASCII_Code codiert.
21.02.2013 17:26 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
21.02.2013 17:33 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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)
21.02.2013 17:50 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
21.02.2013 17:55 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » scanf Zeichenkette und in int umwandeln