![]() |
[C] Formatierte Ein-/Ausgabe mit >>scanf()<< und >>printf()<< --- Frage
Hi, ich bin grade dabei C zu lernen und da bin ich auf ein paar Fragen gestoßen, als ich scanf() behandelt habe. Es geht um das zweite printf(). (printf("Die Zahl war: %d\n",i); )
Meine Fragen: 1. Wieso muss ich nach dem Zeichen für die Dezimalzahl ein \n machen? (Es bedeutet Newline, das weiß ich, aber für was braucht man es da?) 2. Wieso muss ich die Anführungszeichen hinter %d\n machen? (Und nicht hinter dem ,i?) 3. Wieso steht jetzt bei dem i kein Adressoperator? (&) Bitte nicht genervt reagieren, denn ich habe kein Plan davon, da ich gerade damit angefangen habe. ;) thx. |
1. musst du nicht ^^
2. das in den anführungszeichen ist das was ausgegeben wird, dahinter kommen variablen, falls welche ausgegeben werden sollen 3. beim einlesen wird das & benötigt, beim ausgeben nicht |
1. Hab ich jetzt verstanden, danke.
2. Hab ich jetzt so halbwegs verstanden. Woher weiß der Computer dann wo (also, wenn man das was ausgegeben wird in Anführungszeichen schreibt, dann weiß der Computer doch gar nicht wo er die Variable im Text/Ausgabe ausgeben soll) er die Variable (besser gesagt den Wert der Variable) ausgeben soll? 3. Hab ich jetzt auch verstanden, danke. |
Ich versuche dir mal den 2. Punkt genauer zu erläutern:
Also gucken wir uns mal diese Zeile an: "printf("Die Zahl war: %d\n",i);" Das printf sagt dem Compiler erstmal, dass jetzt eine formatierte Ausgabe folgt. Danach kommt dieser Abschnitt: "Die Zahl war: %d\n" Da dies in Anführungszeichen steht, zeigt es dem Compiler, dass das ein Text ist, der ausgegeben wird. Allerdings überprüft er noch, was dort so steht: Wenn er zb. "%d" findet, sagt es ihm, dass an dieser stelle eine ganze (integer) Zahl steht. Das "\n" steht für eine neue Zeile, das hast du richtig erkannt. Bei der Ausgabe ersetzt er dann das "%d" durch das i. Warum? Weil es hinter dem Komma steht. Bsp.: printf("A%d, B%d, C%d", x, y, z); Wenn x = 1, y = 2, z = 3 würde er "A1, B2, B3" ausgeben. Also in das erste %d wird die erste Variable nach dem Komma eingesetzt, beim 2. %d die 2. Variable und beim 3. %d die 3. Variable. Es muss auch nicht unbedingt %d sein: Bei zb. "printf("A%d, B%e, C%f", x, y, z);" wird das %d wieder durch das x, %e durch y und %f durch z ersetzt. %e und %f stehen dann für Gleitkomma-Zahlen. Ich hoffe, dass das jetzt verständlich genug war - hab mir Mühe gegeben :) |
Danke dir, jetzt hab ich das auch verstanden, ich wusste nämlich immer nicht, wie der Compiler die Zahl einsetzt. Jetzt macht das auch Sinn.
PS: %d hab ich genommen, da dies ja die Dezimalzahl ist, und ich mir noch keine Gedanken über Gleitkommazahlen gemacht habe :D. DankeDankeDanke ;) |
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
hier mal was zum nachschlagen - da find ich ist eig. alles für den Anfang recht gut erklärt - ich hab das auch als Buch! |
Ich hab das ja auch. Und dabei ist mir die Frage gekommen. Da steht nämlich nicht erklärt weswegen das newline Zeichen da steht usw... Trotzdem Danke.
|
Naja Newlinezeichen muss ja auch nicht sein
is nur weil sonst das "drücken sie eine Taste..." direkt nach "Schaltjahr" oder "kein Schaltjahr" steht Das ist nur wegen der Optik |
Sorry hab den Thread verwechselt...
Habs jetz rauseditiert... |
Online schaue ich auch gerne da nach:
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] |
So \n Sachen und so sind eig. immer nur wegen der Optik!
|
Zitat:
|
Okay, ich versuchs vorher jetzt immer, aber ich wollte ja wissen wozu das gut ist. ;)
|
Ja steht doch jetz da wozu das gut ist...
Mit & bekommst die Adresse ohne & den Werd der da steht |
Zitat:
in c werden werte immer "by value" übergeben. damit ein funktionsergebnis in der parameterliste zurückübergeben werden kann, ist also ein pointer nötig. damit wird quasi eine übergabe "by reference" erzwungen. zusammenfassung bzw lügen für kinder: wenn eine fkt eine übergebene variable ändern muss, kommt ein & davor. |
Unser Lehrer hat immer gemeint mit & übergibt man das Original und ohne & nur die Kopie...
Wenn das fürs Verständnis was hilft... |
Das sind Zeiger/Referenzen ^^ (eines der Schwierigeren Themen in C++)
z.B. Zitat:
Referenz, Spiegelbild von z.B. einer Variable. Keine Lust das etz ausfürhlich zu erklären xd... Edit: Die Seite Galileo Computing C von A bis Z, [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] , ist echt nice, aber ich versteh nicht warum dort alles mit printf ausgegeben wird oO, mit std::cout/cout is das doch viel angenehmer zu lesen, vorallem für Anfänger...Naja, jedem das seine ^^ |
Das ist deshalb alles mit printf,... weil cin, cout nicht C sondern C++ ist!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:26 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.