getline
-
hallo erstmal,
also ich hab ein problem und zwar bei einem programm aus meinem c++ buch der orginale code dafür ist :
#include <iostream>
#include<string>
using namespace std;
int main()
{
string meldung("schon wieder was dazugelernt"),
prompt("bitte zwei zeilen text eingeben"),
str1,str2,summe;cout<<meldung<<endl;
cout <<"Die laenge der strings:"<<meldung.length()<<endl;
cout<<prompt<<endl;
getline(cin,str1);
getline(cin,str2);
summe=str1+"*"+str2;
cout<<summe<<endl;
return 0;
}und so funktioniert es auch er fügt den ersten string mit dme 2 zusammen. Nun hab ich mir jedoch gedacht ob ich die einzelnen strings nicht auch einzeln aufrufen könnte :
#include <iostream>
#include<string>
using namespace std;
int main()
{
string meldung("schon wieder was dazugelernt"),
prompt("bitte eine zeile text eingeben"),
str1,str2,summe;cout<<meldung<<endl;
cout <<"Die laenge der strings:"<<meldung.length()<<endl;
cout<<prompt<<endl;
getline(cin,str1);
cout<<prompt<<endl;
getline(cin,str2);summe=str1+"*"+str2;
cout<<summe<<endl;
return 0;
}aber dann fügt er am ende die beidne strings nicht zusamen wa smach eich falsch?
-
Hallo,
du liest das Buch von Prinz, richtig?
Schätzungsweise ist das Problem bei deiner Variante, dass das '\n' Zeichen im Eingabepuffer hängt (vom Enter) und deshalb das zweite getline nicht greift. Pack mal ein cin.get() zwischen die beiden getline Aufrufe.
Falls das nicht hilft: Was genau passiert denn (bzw. was passiert nicht). Ich brauche eine genauere Fehlerbeschreibung.
Btw. Bitte verwende die cpp Tags, um dem Code Syntax-Highlighting zu spendieren, erleichtert das Lesen. Danke.
MfG
GPC
-
Dinkum References schrieb:
In order of testing, extraction stops:
2. after the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequenceDas \n bleibt bei getline nicht hängen (wenn das gestimmt hätte, müsste ich jetzt zig Programme ändern :D)
-
ja genau ich lese das bcuh von prinz ich finde es an manchen stellen relativ unübersichtlich ...sry aber ich weis net genau wie ich das cing.get() einfügen soll....also so hab ich es jetzt gemacht
#include <iostream> #include<string> using namespace std; int main() { string meldung("schon wieder was dazugelernt"), prompt("bitte eine zeile text eingeben"), str1,str2,summe; cout<<meldung<<endl; cout <<"Die laenge der strings:"<<meldung.length()<<endl; cout<<prompt<<endl; getline(cin,str1); cout<<prompt<<endl; cing.get(); getline(cin,str2); summe=str1+"*"+str2; cout<<summe<<endl; return 0; }
-
noob123 schrieb:
aber dann fügt er am ende die beidne strings nicht zusamen wa smach eich falsch?
Bei mir funktioniert der Code einwandfrei. Was für einen Compiler hast du denn?
mfg.
-
ja bei mir funktioniert er ja auch ich habe nru das problem dass das programm am ende nicht beide string kombiniert
-
noob123 schrieb:
ja bei mir funktioniert er ja auch ich habe nru das problem dass das programm am ende nicht beide string kombiniert
das tut er bei mir aber
-
ne also bei mri zeigt der compiler 2 fehler an
--------------------Konfiguration: sdfs - Win32 Debug--------------------
Kompilierung läuft...
sdfs.cpp
C:\Dokumente und Einstellungen\Administrator\Desktop\sdfs.cpp(19) : error C2065: 'cing' : nichtdeklarierter Bezeichner
C:\Dokumente und Einstellungen\Administrator\Desktop\sdfs.cpp(19) : error C2228: Der linke Teil von '.get' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von xicl6.exe.sdfs.exe - 2 Fehler, 0 Warnung(en)
-
error C2065: 'cing' : nichtdeklarierter Bezeichner
error C2228: Der linke Teil von '.get' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von xicl6.exe.oben noch mal die vollständigen fehlermeldungen
-
ich mein den teil ohne get(), das was du am anfang geschrieben hast
-
achso ja also er verbindet bei dir am ende ehct beide strings??? und du haat aber auch immer eien leerzeiele dazwischen oder??ß also wenn er dich dne ersten string fragt könntest du theroretisch 2 zeieln schrieebn warum komm tdas sO?
-
noob123 schrieb:
achso ja also er verbindet bei dir am ende ehct beide strings??? und du haat aber auch immer eien leerzeiele dazwischen oder??ß also wenn er dich dne ersten string fragt könntest du theroretisch 2 zeieln schrieebn warum komm tdas sO?
Bitte achte wenigstens etwas auf deine Rechtschreibung, ich kann dir nämlich nicht ganz folgen. Ich versteh absolut nicht, was dein Problem ist. Hier mal mein Programmablauf:
schon wieder was dazugelernt Die laenge der strings:28 bitte eine zeile text eingeben Dies soll die erste Zeile sein bitte eine zeile text eingeben Und daruf folgt die zweite Zeile Dies soll die erste Zeile sein*Und daruf folgt die zweite Zeile
mfg.
-
LordJaxom schrieb:
Dinkum References schrieb:
In order of testing, extraction stops:
2. after the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequenceDas \n bleibt bei getline nicht hängen (wenn das gestimmt hätte, müsste ich jetzt zig Programme ändern :D)
oh oh oh, da hab ich aber böse gepennt...shit. Aber danke, dass du mich dran erinnert hast
noob123 schrieb:
error C2065: 'cing' : nichtdeklarierter Bezeichner
error C2228: Der linke Teil von '.get' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von xicl6.exe.oben noch mal die vollständigen fehlermeldungen
Abgesehen davon, dass es cin.get() heißt, kannst du das getrost rauswerfen, sorry.
MfG
GPC
-
Also wenn ich dich richtig verstanden habe dann lass einfach die Zeilen
#include <iostream> #include<string> using namespace std; int main() { string meldung("schon wieder was dazugelernt"), prompt("bitte eine zeile text eingeben"), str1,str2,summe; cout<<meldung<<endl; cout <<"Die laenge der strings:"<<meldung.length()<<endl; cout<<prompt<<endl; getline(cin,str1); cout<<prompt<<endl; // <-- Weg lassen cing.get(); // <-- Weg lassen getline(cin,str2); summe=str1+"*"+str2; cout<<summe<<endl; return 0; }
weg.
"cing" gibt es sowieso nicht#include <iostream> #include <string> using namespace std; int main() { string meldung("schon wieder was dazugelernt"), prompt("bitte eine zeile text eingeben"), str1,str2,summe; cout<<meldung<<endl; cout <<"Die laenge der strings:"<<meldung.length()<<endl; cout<<prompt<<endl; getline(cin,str1); getline(cin,str2); summe=str1+"*"+str2; cout<<summe<<endl; return 0; }