Probleme mit char, cout und cin (einfacher Code)



  • Ich hab jetzt oben #include<string> und unten string name; hingeschrieben.
    Funktioniert immer noch nicht. Weitere Ideen? 🙂



  • Die Mischung von getchar() und std::cin ist übrigens ein wenig blöd, nutze lieber cin.get(), das macht das Gleiche.
    Der Grund, warum das bei dir nicht klappt, ist folgender:
    cin >> name; liest solange Zeichen ein, bis ein Zeichen kommt, dass - warum auch immer - nicht konvertierbar ist oder ein Whitespace (' ', '\t', '\n'). In deinem Fall ist das ein '\n', weil der User die Eingabe mit Enter abgeschlossen hat. getchar()/cin.get() liest nun das nächste Zeichen vom Eingabepuffer - das '\n'. Merkste was?
    Du musst den Puffer erst leeren. Das geht mit.
    cin.ignore(std::numeric_limitsstd::streamsize::max());
    Das leert solange den Puffer, bis max() Zeichen eingelesen wurden (das Maximum, was möglich ist). Du musst noch limits includiren, wegen numeric_limits.



  • Ich würde getline(std::cin, string); benutzen.



  • Okay, das versuch ich gleich mal, wenn ich nach 10mal lesen hoffentlich alles verstanden hab 😉 Als ich oben gesagt hab, dass ich Anfänger bin, meinte ich damit, dass ich vor 2 Tagen angefangen hab. Also weiß ich praktisch noch nichts 😛
    Da ich zu Beginn using namespace std; verwendet hab, kann ich das std:: vorher dann weglassen oder?



  • Serena schrieb:

    da ich zu beginn using namespace std; verwendet hab, kann ich das std:: vorher dann weglassen oder?

    jopp.
    einfach nur

    string str;
    getline(cin, str);
    

    btw: Besorg dir ein Buch dann kommst du schneller vorran 😉



  • Danke! Mal sehn, obs klappt! 🙂
    Buch ist schon bestellt und morgen da! Ich konnte es nur nicht erwarten anzufangen 😃



  • Serena schrieb:

    Wenn ich dann im Programm einen Namen eingebe und Enter drücke, schließt sich die Box einfach.

    Starte Dein Programm aus einer Konsole, dann schließt diese sich auch nicht, wenn Dein Programm zu Ende ist.



  • Es funktioniert alles nicht. Was mach ich bloß falsch? 😮



  • Serena schrieb:

    Es funktioniert alles nicht. Was mach ich bloß falsch? 😮

    Ich bin mal so nett und bitte dich darum den Code zu posten.



  • Und "es funktioniert nicht" war noch nie eine hilfreiche Fehlerbeschreibung 😉

    Hier mal ein Minimalbeispiel:

    #include <iostream>
    #include <string>
    
    int main(){
        std::string str;
        getline(std::cin, str);
        std::cout << str;
        return 0;
    }
    

    Kompilierts?



  • #include<iostream> 
    #include<string>
    #include<limits>
    using namespace std; 
    
    int main() 
    { 
        int age; 
             cout << "Please insert your age: " << endl; 
        cin >> age;
             getchar(); 
    
        if (age < 18 ) 
            cout << "Acces denied! " << endl; 
            getchar(); 
    
        if (age >= 18) 
        { 
            string name; 
            cout << "Please insert your full name: " << endl; 
            cin >> name;
    		cin.ignore(numeric_limits<streamsize>::max());
    		cin.get();
    
            cout << "Good morning, " << name << endl; 
            cin.get(); 
    
        } 
    
        return 0; 
    }
    

    ich hab jetzt garkeinen Durchblick mehr ... 😛



  • C++ lernen erst vor 2 Tagen begonnen?

    Ich würd das mit dem cin.ignore()/get() für den Anfang mal komplett sein lassen.
    Ich rate Dir an für heute getline() zu benutzen, und bis morgen (bis dein Buch ankommt ;)) warten. Dann hast du nämlich ein strukturiertes Werk vor Dir, wobei alles genauer beschrieben wird, und Du Dich nicht quer durch C++ schlagen musst, sodass Du später noch mehr Fragen hast, als Du sie vorher schon hattest.

    Meine persönliche Meinung dazu.
    Aber mach wie's Dir passt 😛



  • Ja, vor 2 Tagen. Erst aus Langeweile heraus und dann festgestellt, wie interessant das ist 😉

    Ich glaube, ich warte jetzt wirklich bis morgen und fang dann nochmal ganz von Anfang an!
    Aber danke für deine und eure Hilfe! 🙂



  • Hier mal korrigiert.

    int main()
    {
        int age;
        cout << "Please insert your age: " << endl;
        cin >> age; // getchar() weg, Enter muss man so oder so eingeben
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // hier puffer leeren, sorry habe das '\n' vergessen; alles bis zum ersten '\n' löschen
    
        if (age < 18 )
        {
            cout << "Acces denied! " << endl;   // getchar() weg
        }
        else // heißt ansonsten, wenn alter nicht kleiner 18
        {
            string name;
            cout << "Please insert your full name: " << endl;
    
            getline(cin, name); //getline anstatt cin >> name; Das liest mehrere Strings ein
            // cin.get() weg
            cout << "Good morning, " << name << endl;
        }
    
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // hier ebenfalls Puffer leeren
        cin.get(); //einmal zum Abschluss auf eine Eingabe warten
    }
    


  • Es hat endlich funktioniert! Ich werd mich da jetzt nochmal durcharbeiten.
    Vielen lieben Dank, Nathan!! 🙂



  • Ach ja, die Freude bei solch simplen Programmen...
    Wie stolz ich bei meinem Programm war, dass ausgabe ob man Kind, Erwachsener oder Jugendlicher ist... 😃



  • Nathan schrieb:

    [...]
    getline(cin, name); //getline anstatt cin >> name; Das liest mehrere Strings ein

    [...]

    Wieviel denn so im Durchschnitt? Und ... wo werden die dann abgespeichert?
    Und ... gibt das nachfolgende

    cout << name;
    

    dann auch mehrere Strings aus?



  • Belli: damit meint er bestimmt, dass non-alnum-Zeichen nicht einfach so abgeschnitten werden.



  • Ja.
    Ich hatte mich unklar ausgedrükt. 😃



  • Ach, wenn er das meinen würde, könnte er das doch auch schreiben?

    Edit:
    Ups, ein paar Sekunden zu spät ...

    Edit 2:
    Ich verstehe einfach nicht, wieso nicht als Standardantwort auf:

    ... mein Konsolenfenster (meine Box, mein Programm, ...) verschwindet, die einzig vernünftige Antwort kommt:

    Starte Konsolenprogramme aus der Konsole!

    kommt!
    Stattdessen wird so ein Blödsinn wie: Lies noch mal ein Zeichen ein, aber vergiss nicht den Puffer vorher zu löschen, bla bla rausgelassen ... 😕


Anmelden zum Antworten