Verständnigsproblem: cin.get()



  • Hallo!

    Ich habe folgendes Verständnisproblem:

    char ch;
    
    do {
      cin.get(ch);
    }while(ch!='\n');
    
    cout << ch;
    

    Es ist so, ich habe die Schleife (bzw. eine sehr ähnliche) aus dem Taschenrechner von Stroustrup von dem ich die Funktionsweise eigentlich verstanden habe, wäre da nicht dieses cin.get(). Ich verstehe allerdings nicht das wenn ich Beispielsweise folgende Eingabe tätige:
    1234<Enter>
    So wird 1 ausgegeben. Aber zuvor prüfe ich ob ch ungleich '\n' ist, wenn es das ist, wird die Schleife abgebrochen. Kann mir jemand erklären wieso ch nach der Schleife dann wieder 1 ist?

    Also ich habe folgende Vermutung:
    cin.get(ch) liest bekanntermaßen ein Zeichen. Wir das '\n' eingegeben, so wird die Funktion beendet, danach befindet sich in ch wieder der alte Wert. Wobei ich mich wederum frage, wie es dann sein kann das man ch auf '\n' prüfen kann.

    Hoffe mir kann jemand diese Frage erklären. Irgendwo hackts da beim Verständnis.

    Danke im Voraus.

    Code-Hacker



  • seltsam! wenn ich bei dem selben Code 1234<Enter> eingebe, steht in ch nach der Schleife \n
    (nicht schlagen, aber achte noch einmal darauf wann du enter drückst 😉 😃 )



  • Hi!

    Bei wird wird von cout 1 ausgegeben. Und deswegen verwirrt es mich. Das ist auch die Funktionsweise auf die der Taschenrechner aufbaut, nämlich das in ch das erste Token, dann das zweite usw. steht.

    Code-Hacker



  • du machst mir Angst!

    char ch; 
    do { 
      cin.get(ch); 
      cout << ch;
    }while(ch!='\n');
    

    cout<< :p ;



  • Hi!

    Sorry, die Schleife muss natürlich so aussehen, damit das beschriebene ausgegeben wird:

    char ch; 
    do { 
    	cin.get(ch); 
    }while(ch!='\n' && isspace(ch));
    cout << ch;
    

    Code-Hacker



  • where's the prob?
    Hat sich doch damit geklärt oder? Schleife bricht nach einem Durchlauf dh nach erstem get() ab, da (ch!='\n' && isspace(ch)) == false ist da isspace(ch) == false ist.



  • Hi!

    ARGH! Danke ich habs verstanden. Ich weiß wo der Denkfehler war. Danke.

    Code-Hacker


Anmelden zum Antworten