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

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » scanf Zeichenkette und in int umwandeln » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 8 Beiträge
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.
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)
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.
Lycaner

Genau das aber wieso funktioniert das? Ich dach die Zahlen in der Zeichenkette werden in ASCII_Code codiert.
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');
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(
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.
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.