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