cin stream "abschneiden"



  • Hi!

    Ich hätte da folgende Frage:

    Wie kann ich beim Eingabestream cin nach z.B. der ersten Stelle "abschneiden", d.h. der Rest soll ignoriert werden. Ich hab es schon mit cin.ignore() versucht, klappt aber nicht so richtig.
    Ich möchte nämlich nicht, dass der User mit einer einzigen Eingabe gleich in zwei Variablen schreiben kann. Also z.B.

    char a;
    int b;
    
    cin >> a;
    cout << endl;
    cin >> b;
    

    Bei einer Eingabe von "b23" werden gleich mit einer einzigen Eingabe zwei Variablen belegt. Ich möchte aber, dass dies nacheinander geschehen soll.

    Vielen Dank für etwaige Antworten!


  • Mod

    Wenn du möchtest, dass da ein Whitespace zwischen steht, dann prüf eben, ob da ein Whitespace zwischen steht, z.B. mit peek und isspace.



  • Ich weiß nicht ganz wie mein Vorhaben mit "peek" und "isspace" zu bewerkstelligen sein soll? Könntest du das vllt. präzisieren?
    Tut mir leid, hab gerade erst mit C++ angefangen.



  • Du willst also den Rest wegschmeißen?
    Dann

    cin.ignore(255, '\n');
    

  • Mod

    #include <iostream>
    #include <cctype>
    #include <limits>
    using namespace std;
    int main()
    {
      char a;
      int b;
    
      cout << "Gib mir einen char und einen int: ";
      cin >> a;
      if (isgraph(cin.peek()))
        {
          cout << "Lass gefälligst Platz, du pöser, pöser Pube! "
            "Zur Strafe lösche ich alles bis zum nächsten Zeilenumbruch.\n"
            "Gib mir nun den int: ";
          cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
      cin >> b; 
      cout << "Der char ist " << a << " und der int ist " << b << '\n';
    }
    

    @Belli: 255? Das musst du mir erklären.



  • Okay danke, so klappt's. Schade, dass das nicht kürzer geht, also so in der Art von Belli's Version mit cin.ignore();


  • Mod

    Du kannst natürlich auch jedes Mal bedingungslos den Rest der Zeile ignorieren.

    Dann freut sich der Anwender, weil er nicht mehr a 2 Enter eingeben darf und stattdessen a Enter 2 Enter eingeben muss. Nicht.



  • SeppJ schrieb:

    @Belli: 255? Das musst du mir erklären.

    Was soll ich Dir erklären? Geht auch mit 254, 256, 100000. Einfach eine Zahl, von der ich nach der Problembeschreibung ganz beruhigt davon ausgehe, dass sie groß genug ist. Gehst Du nach dem Eingangsposting von größeren Zahlen aus? Wenn ich den in dieser Hinsicht offensichtlich unbedarften Fragesteller verwirren will, kann ich natürlich auch auf max() aus numeric_limits zurückgreifen, um es wasserdicht zu machen.



  • *HUST* SeppJ Umlaute müssen durch Escape-Sequenzen ersetzt werden *HUST*

    duck und weg



  • Hacker schrieb:

    Umlaute müssen durch Escape-Sequenzen ersetzt werden

    Nö. Nur wenn dein Quelltext-Editor eine andere Zeichencodierung als deine Konsole benutzt.


Anmelden zum Antworten