Hallo,
Ich habe eine Frage: In C ist ja der kleinst Datentyp char - da gibt es
was, was mir noch nicht so klar ist:
#include
Moin,
* Daniel Feist
printf("Der Wert von a = %c\n", a); printf("der Wert von a = %d\n", a);
Ich verstehe jetzt nicht, warum man jetzt auch %d geben kann, um char zu bekommen - man bekommt ja dann 65. char wird aber ja mit %c gemacht - man muss den Datentyp angeben.
%c und %d haben erstmal nichts mit dem Datentyp zu tun, sondern sind Anweisungen, wie die Variable zu interpretieren ist. Es bietet sich in 99,9% aller Fälle an, einen passenden Formatstring zu benutzen. Du kannst aber auch mischen, zB. einen Pointer als Integer ausgeben. Lies mal die Manpage von printf(3). Diese Formatstrings tauchen immer wieder auf, das solltest Du verstehen. Thorsten -- If you don't claim your humanity, you will become a statistic. - Tyler Durden
Abend
printf("Der Wert von a = %c\n", a); printf("der Wert von a = %d\n", a);
Ich verstehe jetzt nicht, warum man jetzt auch %d geben kann, um char zu bekommen - man bekommt ja dann 65. char wird aber ja mit %c gemacht - man muss den Datentyp angeben.
Durch das %c bzw. %d gibst Du an, auf welche Weise der Wert interpretiert werden soll. Wenn Du eine Variable vom Typ char anlegst, dann wird deren Wert in einem Speicherbereich von der Groesse eines Bytes, also 8Bits, abgelegt. An dieser Stelle steht in Deinem Fall eine 65 (auf anderen Systemen kann das durchaus ein anderer Wert sein). Gibst Du diesen Wert nun mittels %d aus, so weiss printf(), dass dieser Wert numerisch interpretiert werden soll und es formt daraus eine Zeichenkette "65" und fuegt diese an der Stelle in den Text ein, an der %d steht. Willst Du hingegen als %c ausgeben lassen, so wird aus diesem Wert ein einzelnes Zeichen. Das geschieht, indem gemaess dem Zeichensatz des Systems (bei dir ASCII) der Zahlenwert 65 in das zugehoerige Zeichen A umgewandelt wird. Fuer das Verstaendnis ist wichtig zu wissen: Normalerweise kennt der Entwickler den Typ der Variable und kann sie entsprechend handhaben. Bei printf() ist das nicht so einfach. Diese Funktion hat eine variable Argumentliste. Dadurch kannst Du der Funktion beliebig viele Werte beliebiger Art uebergeben. Das ist angenehm, hat aber einen Nachteil: Da der Entwickler der Funktion nicht wusste, welche Art Werte uebergeben werden, konnte er auch nicht dafuer sorgen, dass eine zum Typ passende Ausgabe stattfindet. Diese Information musst DU der Funktion nun mitgeben und das tust Du, indem Du diese %d, %f, %c etc. verwendest. Nacht! -- 1 Bodo Kaelberer 123 http://www.webkind.de/ 3 4 "A button I have made must be pushed." (ip)
Hallo
#include
int main() { char a = 'A' /* Variable a mit A belegen - wobei man ja '' verwenden muss*/
char b = 65;
printf("Der Wert von a = %c\n", a); printf("der Wert von a = %d\n", a);
Ich verstehe jetzt nicht, warum man jetzt auch %d geben kann, um char zu bekommen - man bekommt ja dann 65. char wird aber ja mit %c gemacht - man muss den Datentyp angeben.
ich könnte mir vorstellen, dass ein Problem an dieser Stelle darstellt, dass man printf hier ja gar nicht mitteilt, ob die übergebene Variable vom Typ 'char' oder 'int' ist. Wenn ich das alles richtig verstehe, tut sich das aber nichts, weil eh auf 'int' gecastet wird, weil man ein einzelnes Byte nicht übergeben kann. Dann heißen also %c und %d beide, dass ein 'int'-Parameter kommt, und unterscheiden sich nur in der Interpretation des Wertes als Zahl oder Buchstabe. Richtig? Gruß, Jürgen
Moin,
* Jürgen Wieferink
printf("Der Wert von a = %c\n", a); printf("der Wert von a = %d\n", a);
Ich verstehe jetzt nicht, warum man jetzt auch %d geben kann, um char zu bekommen - man bekommt ja dann 65. char wird aber ja mit %c gemacht - man muss den Datentyp angeben.
ich könnte mir vorstellen, dass ein Problem an dieser Stelle darstellt, dass man printf hier ja gar nicht mitteilt, ob die übergebene Variable vom Typ 'char' oder 'int' ist.
Stimmt, das ist auch nicht möglich, weil printf() in erster Näherung nicht zwischen char und int unterscheidet. Es wird lediglich unterschieden, ob die Variable als Integer (!=int) oder Zeichen ausgewertet wird.
Wenn ich das alles richtig verstehe, tut sich das aber nichts, weil eh auf 'int' gecastet wird, weil man ein einzelnes Byte nicht übergeben kann.
Von Bytes ist nicht die Rede, bring nicht die Eigenschaften von C und von der Hardware durcheinander.
Dann heißen also %c und %d beide, dass ein 'int'-Parameter kommt, und unterscheiden sich nur in der Interpretation des Wertes als Zahl oder Buchstabe.
Nein, über den Typ wird nichts gesagt. Thorsten -- A: Top posters Q: What's the most annoying thing about email these days?
participants (4)
-
Bodo Kaelberer
-
Daniel Feist
-
Jürgen Wieferink
-
Thorsten Haude