frage zu cin.getline()



  • Hallo!

    ich möchte eine bestimmte anzahl von zeichen mittels cin von einem stream einlesen. das ganze mach ich einfach mit getline(), funktioniert super bei dateien aber nicht, wenn von der tastatur gelesen wird.
    hab also folgendes konstruiert:

    char s[50];
    cout << "Eingabe:";
    cin.getline(s,11, 'x');
    cout << endl << "gelesen [" << s << "]" << endl;
    

    das sollte dazu führen, dass ich 10 zeichen per tastatur einlese, bis ich entweder ein 11. eingebe, oder 'x' drücke.
    aber eigentlich muss ich IMMER (selbst wenn limitter = 'x') die Eingabe mit ENTER abschließen. ist das ok laut standard, oder liegt das einfach am compiler/OS, dass es nicht auch ohne abschließendes ENTER funktioniert...?



  • AFAIK ist das vom Standard her okay. Bei Tastatur Eingaben erwartet C(++) eigentlich immer ein Enter



  • ... bloederweise.

    ich glaub ich hab das schon oefter gefragt, aber gibt es einen standardkonformen weg, dass direkt das eingegebene gelesen wird, ohne enter?



  • ich glaub ich hab das schon oefter gefragt, aber gibt es einen standardkonformen weg, dass direkt das eingegebene gelesen wird, ohne enter?

    Nein. Nicht über die Tastatur.



  • Ich habe das Problem, dass ich eine Eingabe brauche, die auf ein Enter wartet
    und trotzdem mehr einliest als bis zum Leerzeichen.
    Wenn ich mit

    cin >> variable;

    arbeite liest er es nur bis zum leerzeichen ein.

    Wenn ich mit

    cin.getline(variable,50);

    arbeite liest er zwar alles ein aber wartet nicht auf meine Eingabe und da ich es in einer Schleife anwende macht man programm dann einfach weiter und liest das ein was ich als nächstes ausgebe.

    Kann mir da jemand helfen?



  • Weiß keiner wie das geht oder warum antwortet mir keiner??? Ich bin echt am verzweifeln!



  • Hallo,
    ich versteh dein Problem nicht. Kannst du mal etwas Code posten, der selbiges verdeutlicht?



  • Das ist meine Schleife

    do
    {
    menue();
    cout << " ";
    cin >> e;
    switch(e)
    {
    case 1:
    schl.text_eingabe(); <- Hier wird Eingabe aufgerufen
    break;
    case 2:
    schl.text_ausgabe();
    break;
    case 3:
    schl.text_speichern();
    break;
    case 4:
    schl.verschl();
    break;
    case 5:
    schl.entschl();
    break;
    }
    }while(e != 0);

    Das passiert in der Eingabefunktion:

    cout << " Bitte geben Sie einen Text ein:\n";
    cin.getline(text,49);

    Leider wartet die Eingabe jetzt nicht darauf, dass ich was eingebe und die Schleife läuft weiter. Mit cin >> variable; gehts halt auch nicht weil dann ja nur bis zum Leerzeichen eingelesen wird



  • Leider wartet die Eingabe jetzt nicht darauf, dass ich was eingebe und die Schleife läuft weiter. Mit cin >> variable; gehts halt auch nicht weil dann ja nur bis zum Leerzeichen eingelesen wird

    Was daran liegt, dass nach dem cin >> variable noch das '\n' im Puffer liegt. Dieses wird dann von dem getlien gelesen. Deshalb kannst du nix einlesen.
    Lösung:
    Du musst nach dem cin >> Variable alle restlichen Zeichen die sich noch im Eingabepuffer befinden ignorieren:

    void clearIn()
    {
        cin.clear();
    #if DAS_MIT_IGNORE_NICHT_FUNKTIONIERT
        cin.sync();
    #else
        cin.ignore(cin.rdbuf()->in_avail());
    #endif
    }
    
    int main()
    {
    ...
    cin >> e;
    clearIn();  // Zeichen im Eingabepuffer ignorieren.
    ...
    }
    

Anmelden zum Antworten