Frage zu cin.get()
-
Hallo zusammen,
ich habe hier ein kleines Programm, dass binäre Zahlen in Dezimalzahlen umwandelt:int main() { char c=0; int result=0; cout << "Geben Sie eine binaere Zahl ein: "; while(cin.get(c) && (c=='0' || c=='1')) { result*=2; if (c=='1') ++result; } cout << "\nDer dezimale Wert: " << result << endl; return 0; }Ich dachte, dass ich mit cin.get() genau ein Zeichen einlesen kann. Hier gebe ich aber mehrere Zeichen ein (eine mehrstellige Binärzahl). Bedeutet das, dass cin.get() in einer Schleife die Zeichen durchgeht. Wenn ja, dann muss aber doch auch irgendwo die Position gespeichert werden. Wenn das stimmt, wo wird sie denn gespeichert?
Vielen Dank für eure Hilfe
lg, freakC++
-
-
int main( ) { cout << "Geben Sie eine irgendwelche Zeichen ein und drückern Sie ENTER!"; while(cin.get(c)) cout << cin.tellg() << endl; return 0; }Eingabe: aaa
Ausgabe:
-1
-1
-1Grüzzi
-
Also hatte ich recht....das erfreut micht!
Danke, Dravere!
lg, freakC++
und natürlich danke, tellgett0r! Ich verstehe aber nicht die Ausgabe. Warum bleibt die Zahl konstant? Hatte ich etwa doch nicht recht? Ich muss nochmal den Link studieren!!
-
cin.get(c) liest immer nur ein zeichen ein, nachdem enter gedrückt wurde.
wurden mehrere zeichen eingegeben, wird die while schleife solange aufgerufen, bis sich cin.get(c) ein '\n' holt, dann ist schluss und die while schleife wird verlassen.
die position scheint hier tellget nicht zu jucken.
-
Was bedeutet das denn: "bis sich cin.get(c) ein '\n' holt"?? Wenn ich das hier schreibe:
char c; while(cin.get(c)) cout.put(c);dann gibt es der Schleife kein Entrinnen. So wie ich dich verstanden habe, müsste aber die Schleife verlassen werden, wenn "ein \n geholt wird". Wann wird denn ein "Neue Zeile" geholt? Das erreiche ich mit Enter und das wird als Eingabe interpretiert.
Wo liegt mein Denkfehler?
Vielen Dank
lg, freakC++Noch als Ergänzung: Wenn ich wirklich will, dass die Schleife bei \n verlassen wird, dann müsste ich doch das hier schreiben:
while(cin.get(c) && c!='\n') ...
-
man muss enter drücken damit die eingegebenen zeichen in den buffer geschrieben werden. Davon liest cin.get() genau ein zeichen und gibt es zurück
-
freakC++ schrieb:
So wie ich dich verstanden habe, müsste aber die Schleife verlassen werden, wenn "ein \n geholt wird".
Ja, sorry, habe ich falsch ausgedrückt. Ich meinte, das die Schleife unterbrochen wird.
char c; cout << "Geben Sie eine irgendwelche Zeichen ein und drücken Sie ENTER!"; while( cin.get(c) ) { if ( c == '\n' ) cout << "Achtung! Die Schleife stoppt gleich!" << endl; cout << c << endl; if ( c == '\n' ) cout << "Die Schleife wurde gestoppt!" << endl; }