Problem mit cin.get und cin.ignore



  • Wenn ich dieses Programm starte, und bei "Kuerzel" eine Eingabe mache, endet es, anstatt bei "Name" wieder auf eine Eingabe zu warten. Warum ist das so, ist cin.ignore () daran schuld?

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    struct s_Struktur
    {
           char c_Kuerzel[3];                
           char c_Name[21];           
    }; 
    
    int main(int argc, char *argv[])
    {       
            s_Struktur s_New;                
            char c_choice;                    
    
            cout << "Kuerzel: ";
            cin.get (s_New.c_Kuerzel, 2);
    
            cin.ignore ();         
    
            cout << "Name: ";
            cin.get (s_New.c_Name, 20);
    
            return EXIT_SUCCESS;
    }
    


  • Frage: Was für eine Eingabe machst du denn? Wenn das mehr als zwei Tasten waren, wurde die dritte von ignore() übersprungen und der zweite get() bekommt das Zeilenende vorgesetzt.
    Als Lösung kannst du einen etwas größeren Wert angeben:

    cin.ignore(numeric_limits<size_t>::max(),'\n');
    

    PS: Nur ein Vorschlag: Nimm lieber Strings anstelle von char[].


Anmelden zum Antworten