Keine Ausgabe des strings ab dem Leerzeichen?
Folgende Situation:
Ich habe unter Windows relativ viel Erfahrung mit C++, steige aber gerade um auf Linux und taste mich gerade Stück für Stück ran. Nun habe ich eine .cpp erstellt und ein recht einfaches "Programm" geschrieben.
string lol;
cout << "Gebe ein String ein: ";
cin >> lol;
cout << "Das hast du Eingegeben: " << lol << "\n";
(Also der include etc. ist alles dabei, habe es bloß jetzt bei dem Beispiel rausgelassen)
Nun habe ich es via g++ compilen lassen, aber nach der Eingabe von "Hallo Welt!", hörte beim Leerzeichen auf. ("Das hast du Eingegeben: Hallo")
Nun meine Frage: Warum ist das so? Unter VS2019 mit den dortigen Compilern ist dies nicht passiert. Ich habe keine Erklärung und verzweifle an meinen Fähigkeiten, da ich eigentlich sofort mit der Objektorientierung durchstarten und erste Spiele entwerfen wollte und mit so einem Fehler jetzt nicht gerechnet habe.
Danke schon mal für eine Antwort! :)
Edit: Mit getline(cin) klappt es, warum aber nicht mit cin?
3 Antworten
- operator>>(istream&, string) überspringt Whitespace und liest dann alle Zeichen bis zum nächsten Whitespace (welches in der Eingabe stehen bleibt). Das entspricht scanf(" %s", str) in C. Wenn Du damit Leerzeichen lesen kannst, ist das sicher kein Standard-C++.
- getline(istream&, string&) liest alle Zeichen bis zum nächsten Zeilentrenner. Der Zeilentrenner wird gelesen, aber nicht gespeichert. Das entspricht scanf("%[^\n]%*c", str) in C.
cin bricht bei einem Leerzeichen ab. Wenn du mit Leerzeichen via cin einlesen willst, wäre statt
cin >> lol;
nun zu verwenden: [1]
getline(cin, lol);
Und lass dich von dem anderem Kommentator nicht abschrecken. C++ hat viele Vorteile gegenüber C, wenn man sich auf die richtigen Features fokussiert und die vielen Möglichkeiten seit C++11 nutzt. (siehe z.B. memory management über smart poninter wie unique_ptr im Vergleich zu dem -- inbesondere im Bezug auf exceptions -- schnell unsicherem Zeug, das in C verwendet wird).
Cin und cout so zu verwenden verursacht meines Wissens nach nur Probleme aus den unterschiedlichsten Gründen.
Ich würde stattdessen Eher Methoden wie printf oder fgets nutzen.
Evtl. musst du auch iregndetwas flushen.
Ich kenne mich mit C++ wirklich nicht genau aus, um zu erraten, warum das bei dir nicht funzt.
Vermutlich ist das eines der typischen Cin cout oder sonstigen C++-Probleme, die man allein dadurch hat, das die Sprache unübersichtlich und hässlich ist, weshalb ich auch eher pures C bevorzuge.
Es ist halt so, dass es unter Windows geklappt hat und auf Linux mit den exakt selben Quellcode halt nicht.
Mit getline(cin) klappt es, mit scanf und printf auch (wollte aber eigentlich schon beim "modernen" C ++ bleiben und nicht C - Sachen auspacken xD)