Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
26.05.11, 17:41
|
#1
|
Banned
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
|
[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.
|
|
|
26.05.11, 18:12
|
#2
|
Ist öfter hier
Registriert seit: Nov 2009
Beiträge: 219
Bedankt: 189
|
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
|
|
|
26.05.11, 18:38
|
#3
|
Banned
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
|
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.
|
|
|
26.05.11, 18:54
|
#4
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
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
|
|
|
26.05.11, 19:20
|
#5
|
Banned
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
|
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  .
DankeDankeDanke
|
|
|
26.05.11, 20:29
|
#6
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu 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!
|
|
|
26.05.11, 20:54
|
#7
|
Banned
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
|
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.
|
|
|
26.05.11, 21:08
|
#8
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
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
|
|
|
26.05.11, 21:09
|
#9
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
Sorry hab den Thread verwechselt...
Habs jetz rauseditiert...
|
|
|
27.05.11, 07:48
|
#10
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Online schaue ich auch gerne da nach:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
|
|
|
27.05.11, 12:04
|
#11
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
So \n Sachen und so sind eig. immer nur wegen der Optik!
|
|
|
29.05.11, 20:46
|
#12
|
Newbie
Registriert seit: Apr 2009
Beiträge: 78
Bedankt: 21
|
Zitat:
Zitat von Nudelsalat96
3. Wieso steht jetzt bei dem i kein Adressoperator? (&)
thx.
|
Weiss nicht ob das schon erklärt worden ist, aber bevor du z.B. solch eine Frage stellst, kannst ja ausprobieren was passiert wenn du jetzt in diesem Fall den Adressoperator hinzufügst. Du solltest die Adresse dann "rausgespuckt" bekommen, willst aber den Wert welcher bei dieser Adresse gespeichert ist, deshalb kein &
|
|
|
30.05.11, 18:37
|
#13
|
Banned
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
|
Okay, ich versuchs vorher jetzt immer, aber ich wollte ja wissen wozu das gut ist.
|
|
|
31.05.11, 07:27
|
#14
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Zitat:
Zitat von Nudelsalat96
Okay, ich versuchs vorher jetzt immer, aber ich wollte ja wissen wozu das gut ist. 
|
scanf erwartet einen pointer auf einen wert, ist normalerweise im h-file ersichtlich. in diesem speziellen fall nicht, da eine nicht definierte anzahl von werten angegeben werden können.
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.
|
|
|
30.05.11, 19:50
|
#15
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
Ja steht doch jetz da wozu das gut ist...
Mit & bekommst die Adresse
ohne & den Werd der da steht
|
|
|
31.05.11, 19:41
|
#16
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
Unser Lehrer hat immer gemeint mit & übergibt man das Original und ohne & nur die Kopie...
Wenn das fürs Verständnis was hilft...
|
|
|
08.06.11, 22:07
|
#17
|
No0n3
Registriert seit: Mar 2010
Beiträge: 234
Bedankt: 875
|
Das sind Zeiger/Referenzen ^^ (eines der Schwierigeren Themen in C++)
z.B.
Zitat:
int X=30;
int *pX = NULL;
int &rX = X;
pX = &X;
cout<<"Zeiger: pX="<<*pX<<endl;
cout<<"Referenz: rX="<<rX;
|
Zeiger, erklärt sich eig. von alleine ^^, Zeigt auf die Adresse einer Variable (oder Structur oder sonst was...)
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 Mitglieder sichtbar. Bitte einloggen oder neu 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 ^^
__________________
Everything's gonna be alright...
|
|
|
09.06.11, 01:12
|
#18
|
Erfahrener Newbie
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
|
Das ist deshalb alles mit printf,... weil cin, cout nicht C sondern C++ ist!
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
().
|