myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

[C] Formatierte Ein-/Ausgabe mit >>scanf()<< und >>printf()<< --- Frage

Willkommen

myGully

Links

Forum

 
Antwort
 
Themen-Optionen Ansicht
Ungelesen 26.05.11, 17:41   #1
Nudelsalat96
Banned
 
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
Nudelsalat96 ist noch neu hier! | 0 Respekt Punkte
Standard [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.
Nudelsalat96 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 18:12   #2
waldfee0071
Ist öfter hier
 
Benutzerbild von waldfee0071
 
Registriert seit: Nov 2009
Beiträge: 219
Bedankt: 189
waldfee0071 ist noch neu hier! | 0 Respekt Punkte
Standard

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
waldfee0071 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 18:38   #3
Nudelsalat96
Banned
 
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
Nudelsalat96 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Nudelsalat96 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 18:54   #4
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

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
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 19:20   #5
Nudelsalat96
Banned
 
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
Nudelsalat96 ist noch neu hier! | 0 Respekt Punkte
Standard

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
Nudelsalat96 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 20:29   #6
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

[ 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!
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 20:54   #7
Nudelsalat96
Banned
 
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
Nudelsalat96 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Nudelsalat96 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 21:08   #8
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

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
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 26.05.11, 21:09   #9
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

Sorry hab den Thread verwechselt...
Habs jetz rauseditiert...
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 27.05.11, 07:48   #10
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Online schaue ich auch gerne da nach:

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
germgerm ist offline   Mit Zitat antworten
Ungelesen 27.05.11, 12:04   #11
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

So \n Sachen und so sind eig. immer nur wegen der Optik!
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 29.05.11, 20:46   #12
testerws
Newbie
 
Registriert seit: Apr 2009
Beiträge: 78
Bedankt: 21
testerws ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Nudelsalat96 Beitrag anzeigen
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 &
testerws ist offline   Mit Zitat antworten
Ungelesen 30.05.11, 18:37   #13
Nudelsalat96
Banned
 
Registriert seit: Jan 2011
Beiträge: 368
Bedankt: 161
Nudelsalat96 ist noch neu hier! | 0 Respekt Punkte
Standard

Okay, ich versuchs vorher jetzt immer, aber ich wollte ja wissen wozu das gut ist.
Nudelsalat96 ist offline   Mit Zitat antworten
Ungelesen 31.05.11, 07:27   #14
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Nudelsalat96 Beitrag anzeigen
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.
germgerm ist offline   Mit Zitat antworten
Ungelesen 30.05.11, 19:50   #15
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

Ja steht doch jetz da wozu das gut ist...
Mit & bekommst die Adresse
ohne & den Werd der da steht
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 31.05.11, 19:41   #16
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

Unser Lehrer hat immer gemeint mit & übergibt man das Original und ohne & nur die Kopie...
Wenn das fürs Verständnis was hilft...
Timmee1616 ist offline   Mit Zitat antworten
Ungelesen 08.06.11, 22:07   #17
Etikareti
No0n3
 
Benutzerbild von Etikareti
 
Registriert seit: Mar 2010
Beiträge: 234
Bedankt: 875
Etikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt PunkteEtikareti erschlägt nachts Börsenmakler | 13725 Respekt Punkte
Standard

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...
Etikareti ist offline   Mit Zitat antworten
Ungelesen 09.06.11, 01:12   #18
Timmee1616
Erfahrener Newbie
 
Registriert seit: Aug 2010
Beiträge: 150
Bedankt: 28
Timmee1616 ist noch neu hier! | 0 Respekt Punkte
Standard

Das ist deshalb alles mit printf,... weil cin, cout nicht C sondern C++ ist!
Timmee1616 ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.


Sitemap

().