getline() Problem



  • Hallo Leutz!
    Ich habe ein Problem mit der Funktion getline(cin, arrayname) ...

    ...
     string eingabea, eingabeb;   
      cout<<"Bitte geben Sie eine Nachricht ein:"<<endl;
       getline(cin, eingabea);
    
      cout<<"Geben Sie hier bitte eine zweite Nachricht ein:"<<endl;
       getline(cin, eingabeb);
    ...
    

    Normal müsste ich jetzt die eingabea eingeben und dann die eingabeb, doch ich kann nur die eingabeb eingeben, eingabea überspringt mir das Programm einfach, wieso ? Weiss jemand woran das liegt ?

    Hoffe mir kann jemand helfen! ThX
    n()()bi



  • Ungetested:
    Versuch doch mal cin.flush() vor getline einzufügen



  • Funktioniert auch nicht!
    Mit cin>> geht es, aber das Problem daran ist, dass sobald in die Variable Sonderzeichen wie "?", "," oda ähnliches, das Programm abbricht ! Gibt es eine andere Funktion als getline, die Sonderzeichen genehmigt ?



  • versuch mal cin.ignore(1,'\n');

    nach jedem cout



  • oder eigentlich nur einmal vor dem block muesste reichen sieht so aus als waere da noch ein endl im puffer der beim ersten getline versuch geloescht wird

    cin.ignore(1,'\n');
    bedeutet dass er alle 1 zeichen vor dem nexten zeilenende loesccht also nur das zeilenende



  • flush sollte aber das selbe bewerkstelligen genau wie endl



  • .o0

    nicht raten 😉

    hol dir .. wenns das studio 6 ist, irgendwann den stl fix von hume sikkins
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=Programming&ProgKNr=1#Code

    fürs löschen des buffers gibt es verschiedene möglichkeiten..
    unter windows wäre dieses eine:

    #include <string>
    #include <iostream>
    using namespace std;
    int main()
    {
        string temp;
        cout <<"Bitte Ihre Eingabe 1";
        getline(cin,temp);
        cout<<temp<<endl;
    
        cin.clear(); //flag auf "buffer auf" setzen
        cin.ignore(cin.rdbuf()->in_avail()); //lese, solange zeichen im buffer
        //cin.ignore(numeric_limits<streamsize>::max(), '\n'); //andere variante
    
        cout <<"Bitte Ihre Eingabe 2";
        string temp1;
        getline(cin,temp1);
        cout<<temp1<<endl;
    }
    

Anmelden zum Antworten