errox Geschrieben 26. Dezember 2008 Geschrieben 26. Dezember 2008 Hallo. Ich habe zwar ein ziemlich winziges aber auch Verhärendes Problem. Ich möchte gerne Daten umbennen können, aber mit dem Datentyp String wird nur ein Wort gespeichert. string eingabe; cin >> eingabe; cout << eingabe; Wenn ich "Hallo" eingebe kommt auch "Hallo" raus. Schön und gut, aber wenn ich "Hallo Ich will umbenannt werden" eingebe, kommt immernoch nur "Hallo" raus. Das ist zwar eine Kleinigkeit, aber ich verzweifel daran. Liebe Grüße errox Zitieren
Klotzkopp Geschrieben 27. Dezember 2008 Geschrieben 27. Dezember 2008 Der operator>> für std::string trennt nach jedem Whitespace-Zeichen (Leerzeichen, Tab, Zeilenumbruch usw.). Nimm std::getline, um eine ganze Zeile einzulesen. Zitieren
errox Geschrieben 27. Dezember 2008 Autor Geschrieben 27. Dezember 2008 Hallo. Vielen Dank für die Schnelle Antwort, aber das lässt sich nicht so ganz mit einer Vorherigen eingabe kombinieren: char entry; cout << "<2> Konfiguration erstellen\n"; cin >> entry; else if(entry == '2') { string name_config; string name_art; double preis_art; bool print_art; system("cls"); cout << version << endl; cout << "Bitte geben sie einen Namen der Neuen Konfiguration ein\n"; getline(cin,name_config); system("cls"); cout << version << endl; cout << "Name der Neuen Konfiguration: " << name_config << endl; Nachdem ich "entry" eingegeben hab, wird automatisch ein Name für die Konfiguration erstellt: "" also wirklich nichts. Wo liegt das Problem? als char kann ich nicht über Getline definiert werden. Liebe Grüße Zitieren
Klotzkopp Geschrieben 27. Dezember 2008 Geschrieben 27. Dezember 2008 Wo liegt das Problem?Das Problem ist, dass operator>> und getline grundsätzlich unterschiedlich arbeiten. Der Operator versucht etwas einzulesen, ignoriert dabei Whitespace am Anfang, und bricht ab, sobald etwas eingegeben wird, das nicht "passt". Wenn du also ein int mit >> einliest, bleibt der Zeilenvorschub (die Enter-Taste) in cin stehen. Ein nachfolgender Aufruf von >> bleibt davon unberührt, weil der wie gesagt Whitespace am Anfang ignoriert. Getline tut das aber nicht. Die Funktion liest genau bis zum nächsten Zeilenvorschub. Und weil nach dem Einlesen von entry genau das als nächstes aus cin kommt, liest getline eine leere Zeile ein. Du kannst das verhindern, indem du zwischen >> und getline alles bis zum nächsten Zeilenvorschub ('\n') aus dem Eingabestrom ausliest und verwirfst: while( cin.get() != '\n' ); Zitieren
errox Geschrieben 27. Dezember 2008 Autor Geschrieben 27. Dezember 2008 Funktioniert wunderbar, vielen dank. Liebe Grüße, errox Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.