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 sequence

    Das \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 sequence

    Das \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; 
    }
    

Log in to reply