Zwei Fragen zu cin.getline bzw. getline



  • Guten Abend,

    ich hätte zwei Fragen zu cin.getline() und getline().

    Frage 1: Ich will/muss mit cin.getline() einen String einlesen.

    const int SIZE=40;
    char kette[SIZE]; //erstelle eine neue Zeichenkette mit max. Länge SIZE
    cout << "Geben Sie einen String ein, der nicht mehr als 40 Zeichen hat: " << endl << endl;
    cin.getline(kette, SIZE); //liest Satz von Benutzer ein
    

    Hier wird also eine Eingabe über die Tastatur eingelesen. Allerdings schließt sich die Konsole, wenn mehr als die 40 erlaubten Zeichen eingegeben werden, was ja auch logisch ist. Mein Problem ist jetzt, dass ich nicht will, dass die Konsole geschlossen wird, sondern ich will ausgeben, dass der eingegebene String zu lang war. Wie kann ich das machen? Mein Problem hierbei ist, dass ja in kette nur die 40 ersten eingegebenen Zeichen gespeichert werden. Deswegen fällt ja sowas wie

    Falls Länge(kette) > 40....

    ja weg. Wie könnte man das lösen?

    Frage 2: Ich muss ebenfalls wieder einen String von der Tastatur einlesen, allerdings dieses Mal nur mit getline.

    string input;
    	getline(cin, input);
    

    Dieser String kann sowohl Zahlen als auch Operatoren (d.h. +, -, *, /, 🙂 beinhalten (Eingabe z.B. 45+12=98). Später muss ich in ner if-Anweisung fragen, ob das aktuelle Zeichen eine Ganzzahl oder eben ein Operator ist. Wie mach ich das?
    Also ich müsste sowas machen wie: if(input[i]=Ganzahl)

    Wie geht man da vor?

    Danke für jede Antwort



  • Bin zwar erst seit 2 Wochen daran C++ zu lernen aber zu deiner ersten Frage habe ich eine, meiner Meinung nach unelegante, Lösung gefunden. Aber wenn es so läuft, wie ich es mir denke, funktioniert sie.

    const int SIZE=40;
        int temp_size=2000;
        char kette[SIZE];                                       //erstelle eine neue Zeichenkette mit max. Länge SIZE
        char temp_chain[temp_size];
        std::cout << "Geben Sie einen String ein, der nicht mehr als 40 Zeichen hat: " << std::endl << std::endl;
        std::cin.getline(temp_chain, temp_size);  //liest Satz von Benutzer ein
        if(temp_chain[41])
        {
            std::cout<<"Zu viele Zeichen eingegeben!"<<std::endl;  
        }
        else
        {
            for(int i=0;i<40;++i)
            {
            temp_chain[i]=kette[i];
    
            }
        }
        std::cin.get();
    

    Zu deiner zweiten Frage: darüber habe ich auch schon einmal nachgedacht.. Sollte das normalerweise nicht in der art funktionieren:
    String einlesen, in einer schleife zeichen für zeichen durchgehen, jeweils mit einer tabelle vergleichen und somit in einer var speichern und dann damit eine gleichung zusammenstellen(sozusagen : if(testarr[2]=!operator){testarr[2]=int c;}else{testarr[2]=ziffer;}
    ?

    naja, werd bestimmt noch irgendwann auf eine Lösung stoßen wenn ich genug befehle kennengelernt und benutzen gelernt habe ;P


Log in to reply