Hallo,
Ich verstehe in meinem Übungswerk eine Aussage nicht - ich würde mich sehr
über Antworten freuen! Vielen Dank
Beispiel:
#include
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen. Peter
On Mon, 19 May 2003, Peter Wiersig wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben - '%d' gibt ja nur den Datentyp (Integer) aus. Ich verstehe nicht, warum das dann nochmal ganz hinten angegeben werde muss!
Peter
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Gruss Daniel -- clusterix.perl@gmx.de
At 16:45 19.05.03, Daniel Feist wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben -
Ja, huebsch. Fuer den Compiler ist das eine simple nichtssagende Textkonstante.
'%d' gibt ja nur den Datentyp (Integer) aus.
%d gibt primaer gar nichts aus. %d ist ein Platzhalter, ein sogenannter Formatstr, mit der Du der printf()-Routine sagst, dass da noch irgendwo ein Parameter rumliegt, der ein bestimmtes Format hat. Dieses %d wird dann eben durch den (menschenlesbar formatierten) Inhalt Parameter, der folgt, *ersetzt*. Der Parameter selbst fehlt aber noch.
Ich verstehe nicht, warum das dann nochmal ganz hinten angegeben werde muss!
Damit der Laufzeitinterpreter von printf() das %d auch mit dem richtigen aktuellen Wert von a fuettern kann. Probier doch einfach mal aus, was passiert, wenn Du a, b, c nicht angibst. Vinzent.
On Mon, 19 May 2003, Vinzent Hoefler wrote:
At 16:45 19.05.03, Daniel Feist wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben -
Ja, huebsch. Fuer den Compiler ist das eine simple nichtssagende Textkonstante.
'%d' gibt ja nur den Datentyp (Integer) aus.
%d gibt primaer gar nichts aus. %d ist ein Platzhalter, ein sogenannter Formatstr, mit der Du der printf()-Routine sagst, dass da noch irgendwo ein Parameter rumliegt, der ein bestimmtes Format hat. Dieses %d wird dann eben durch den (menschenlesbar formatierten) Inhalt Parameter, der folgt, *ersetzt*. Der Parameter selbst fehlt aber noch.
Ich verstehe nicht, warum das dann nochmal ganz hinten angegeben werde muss!
Ich meinte eigendlich, warum vor a=%d das 'a' angegeben werden muss und warum am Schluss dann nochmal 'a' angegeben wird! Mir kam das komisch vor mit den 2 'a's. Man könnte ja auch das erste a weglassen.
Damit der Laufzeitinterpreter von printf() das %d auch mit dem richtigen aktuellen Wert von a fuettern kann. Probier doch einfach mal aus, was passiert, wenn Du a, b, c nicht angibst.
Dann bekomme ich ein Zahlengewirr - das geht auf jeden Fall nicht! Trotz allem - Vielen Dank für deine tatkräftige Mithilfe!
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Gruss Daniel -- clusterix.perl@gmx.de
Am Montag, 19. Mai 2003 17:03 schrieb Daniel Feist:
On Mon, 19 May 2003, Vinzent Hoefler wrote:
At 16:45 19.05.03, Daniel Feist wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben -
Ja, huebsch. Fuer den Compiler ist das eine simple nichtssagende Textkonstante.
'%d' gibt ja nur den Datentyp (Integer) aus.
%d gibt primaer gar nichts aus. %d ist ein Platzhalter, ein sogenannter Formatstr, mit der Du der printf()-Routine sagst, dass da noch irgendwo ein Parameter rumliegt, der ein bestimmtes Format hat. Dieses %d wird dann eben durch den (menschenlesbar formatierten) Inhalt Parameter, der folgt, *ersetzt*. Der Parameter selbst fehlt aber noch.
Ich verstehe nicht, warum das dann nochmal ganz hinten angegeben werde muss!
Ich meinte eigendlich, warum vor a=%d das 'a' angegeben werden muss und warum am Schluss dann nochmal 'a' angegeben wird! Mir kam das komisch vor mit den 2 'a's. Man könnte ja auch das erste a weglassen.
Damit der Laufzeitinterpreter von printf() das %d auch mit dem richtigen aktuellen Wert von a fuettern kann. Probier doch einfach mal aus, was passiert, wenn Du a, b, c nicht angibst.
Dann bekomme ich ein Zahlengewirr - das geht auf jeden Fall nicht!
Trotz allem - Vielen Dank für deine tatkräftige Mithilfe!
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Gruss Daniel -- clusterix.perl@gmx.de
Hallo *, um es nochmal klar zu machen: int main() { int a; /* Deklaration von Variablen */ int b; int c; a=4; /* Inizialisierung der Variablen */ b=3; c=12; printf("der Wert von int a=%d, b=%d, c=%c"\n, a,b,c); ^^^ ^^^ ^^^ # hier wird nur ein string ausgegeben. Die Platzhalter %d und %c werden # mit den werten der Variablen gefuellt die am ende (nach dem Komma) # angegeben werden (a,b,c). # Das ganze koennte auch so aussehen: printf("blabla %d laber %d schaumermal=%c\n", a, b, c); return 0; } -- __________________________________________________________ Martin Schmiderer | phone: +49 (0)7071-9457-225 science + computing ag | fax: +49 (0)7071-9457-221 Hagellocher Weg 71-75 | smtp: m.schmiderer@science-computing.de D-72070 Tuebingen | http: www.science-computing.de
Am Montag, 19. Mai 2003 17:03 schrieb Daniel Feist:
Ich meinte eigendlich, warum vor a=%d das 'a' angegeben werden muss und warum am Schluss dann nochmal 'a' angegeben wird! Mir kam das komisch vor mit den 2 'a's. Man könnte ja auch das erste a weglassen.
Richtig. das a von printf "..... a=%d ...",..."; kannst du weglassen. Oder es durch "Die erste Variable lautet:" ersetzen. Ganz wie du möchtest. Es ist eine einfache Textausgabe. Mehr und auch nicht weniger MfG Frnak Lanitz -- http://www.PartySOKe.de - Wissen was geht! http://www.Fraehngk.de - Tie lebt ! (Helfer gesucht!) ICQ #64698029
Hallo, On Mon, 19 May 2003, Daniel Feist wrote:
Ich meinte eigendlich, warum vor a=%d das 'a' angegeben werden muss und warum am Schluss dann nochmal 'a' angegeben wird! Mir kam das komisch vor mit den 2 'a's. Man könnte ja auch das erste a weglassen.
Du hast printf nicht verstanden, wobei das Beispiel auch etwas ungluecklich diesbezueglich ist. Was haben wir aber eigentlich? printf("der Wert von int a=%d, b=%d, c=%c"\n, a,b,c); Zuerstmal ist da ein Fehler, das '\n' gehoert mit in den Formatstring, dem ersten Argument von printf: printf("der Wert von int a=%d, b=%d, c=%c\n", a,b,c); (achte darauf, wo das zweite " den String beendet!) So. Wir haben also printf mit 4 Argumenten: printf( "der Wert von int a=%d, b=%d, c=%c\n", a, b, c ); Der komplette String ist _ein_ Argument, das allerdings eben 3 Platzhalter fuer Variablen enthalten muss (siehe man printf). Man koennte also schreiben: printf( "%d%d%c", a, b, c ); Oder, etwas ausfuehrlicher (Achte wieder auf die "", der String ist nun sehr lang!) printf( "Der in der Variablen 'a' enthaltene Wert ist: %d\n der in der Variablen 'b' enthaltene Wert ist: %d\n der in der Variablen 'c' enthaltene Wert ist: %c\n", a, b, c ); Was macht nun printf? Nunja, eigentlich ganz simpel. Es verlangt erstmal einen 'const char*' als erstes Argument. In diesem Argument sucht es dann nach Platzhaltern wie %d, %f, %i usw. Jedesmal, wenn ein Platzhalter gefunden wird, wird an dieser Stelle versucht, das jew. naechste Argument (das 2te, 3te usw.) gemaess der Formatierungsangabe des Platzhalters einzusetzen. Im Beispiel also (ich spiel mal printf): Ok, ich bekomm ein 'const char*' als erstes Argument, soweit so gut. Geben wir erstmal alles bis zum ersten Platzhalter aus: »Der in der Variablen 'a' enthaltene Wert ist: « Huch! Jetzt hab ich nen Platzhalter! Aha. Ok, ich soll also das naechste Argument, also Nr. 2, als "signed decimal" ausgeben. Machen wir. Ok, das naechste Arguement ist die Variable a, schauen wir also, was drin steht, ah, ne 4, also geben wir das mal aus: »4« So, das war der erste Platzhalter... Was als naechstes? Ok, der String geht weiter: »\n der in der Variablen 'b' enthaltene Wert ist: « Nun wieder ein Platzhalter (%d): »3« .... usw... Du musst also unterscheiden zwischen dem erstem Argument (einem 'const char*'), dem "Formatstring", das durch ein '\0' abgeschlossen sein muss und ggfs. Platzhalter enthalten kann. Die Platzhalter werden durch ein '%' gekennzeichnet, ein auszugebendes '%' muss als '%%' im 'const char*' stehen. Kommen Platzhalter vor, so muss fuer jeden Platzhalter ein weiteres Argument angeben werden, dass dann gemaess der Vorgabe des Platzhalters ausgegeben wird. Achso, statt "Platzhalter" wird i.d.R. der Begriff "Formatangaben" o.ae. verwendet... Ach noch was: Das Beispiel ist noch weiter defekt, die Variable 'c' ist als 'int' deklariert, soll aber als 'char' (Platzhalter %c) ausgegeben werden... Aehm, also, wenn sowas kaputtes in deinem Lehrtext als Beispiel vorkommt, dann kannst du wohl davon ausgehen, dass der Lehrtext, aehm, vornehm formuliert, "schlecht" ist... -dnh -- "That time in Seattle... was a nightmare. I came out of it dead broke, without a house, without anything except a girlfriend and a knowledge of UNIX." "Well, that's something," Avi says. "Normally those two are mutually exclusive." --Neal Stephenson, "Cryptonomicon"
On Mon, 19 May 2003 at 16:45 (+0200), Daniel Feist wrote:
On Mon, 19 May 2003, Peter Wiersig wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben - '%d' gibt ja nur den Datentyp (Integer) aus.
Sagt wer? Gruss, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Die Praxis sollte ein Ergebnis des Nachdenkens sein, nicht umgekehrt. -- Hermann Hesse
On Mon, 19 May 2003, Bernhard Walle wrote:
On Mon, 19 May 2003 at 16:45 (+0200), Daniel Feist wrote:
On Mon, 19 May 2003, Peter Wiersig wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben - '%d' gibt ja nur den Datentyp (Integer) aus.
Sagt wer?
Ich habe micht vertippt - es muss eigendlich ...Datentyp Integer an. Damit wird ja auf 'a' verwiesen - das habe ich schon herausgefundem.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
Gruss Daniel -- clusterix.perl@gmx.de
On Mon, 19 May 2003 at 17:00 (+0200), Daniel Feist wrote:
On Mon, 19 May 2003, Bernhard Walle wrote:
On Mon, 19 May 2003 at 16:45 (+0200), Daniel Feist wrote:
On Mon, 19 May 2003, Peter Wiersig wrote:
Daniel Feist wrote:
Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
mit %d plazierst du eine Markierung, an der ein Integer ausgegeben werden soll. Nach dem Formatierungsstring gibst du dann die Varaiblen an, die ausgegeben werden sollen.
Aber wir haben doch 'a' schon vorher angegeben - '%d' gibt ja nur den Datentyp (Integer) aus.
Sagt wer?
Ich habe micht vertippt - es muss eigendlich ...Datentyp Integer an.
Damit wird ja auf 'a' verwiesen - das habe ich schon herausgefundem.
Der Ausdruck a reapraesentiert den Inhalt der Variablen mit dem Namen a. Gruss, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Die Geschichte lehrt die Menschen, dass die Geschichte die Menschen nichts lehrt. -- Mahatma Ghandi
Hi
printf("der Wert von int a=%d, b=%d, c=%c"\n, a,b,c);
Bei der Funktion printf wird ja erst die Variable und ihr Datentyp angezeigt, damit der Compiler weiß, um welchen datentyp es sich handelt. Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
Das a=%d ist einfach eine Zeichenkette, die ausgegeben wird, wobei %d durch den entsprechenden Wert (die Liste mit den vielen Kommas) ersetzt wird. Das da "a" steht hat ueberhaupt keine Bedeutung. Es koennte ebensogut "x" oder "Wert der Variablen" stehen. Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ 3 4 "A button I have made must be pushed." (ip)
Daniel Feist
printf("der Wert von int a=%d, b=%d, c=%c"\n, a,b,c);
Bei der Funktion printf wird ja erst die Variable und ihr Datentyp angezeigt, damit der Compiler weiß, um welchen datentyp es sich handelt. Ich verstehe nicht ganz, warum man jetzt an das Ende der String a,b,c schreibt - man hat das alles doch schon mit a=%d usw. gemacht!
Du musst dir die Formatanweisung wie eine Schablone mit Platzhaltern vorstellen. Wäre das ein gedrucktes Formular, sähe das in etwa so aus: der Wert von int a=......, b=......., c=....... a b c Und du müsstest mit einem Stift die Zahlen eintragen. Das Eintragen erledigt nun der Compiler für dich, aber er versteht den Inhalt der Formatschablone nicht, sondern erkennt nur, dass da ein Text ist, in dem er an bestimmten Stellen (da wo %d bzw. %c steht) Werte einfügen muss, die du ihm zusätzlich liefern musst. Daher gibst du dann *nach* der Formatschablone die Variablen in der Reihenfolge an, wie sie im Text eingesetzt werden sollen. Philipp
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
- - ----- Original Message -----
From: "Daniel Feist"
participants (10)
-
Bernhard Walle
-
Bodo Kaelberer
-
Daniel Feist
-
David Haller
-
Frank Lanitz
-
Martin Schmiderer
-
Peter Wiersig
-
Philipp Thomas
-
Skyman
-
Vinzent Hoefler