cin.getline Problem -Anfängerproblem



  • Hallo!
    Ich habe das Gefühl, das ist jetzt ein Anfängerproblem!

    #include <iostream.h>
    
    void main(void)
    {
    	char eingabe[]="";
    	cin.getline(eingabe,100);
    
    	cout << "Ihre Eingabe: ---" << eingabe << "---\n";
    
    	if(eingabe=="test")
    	{
    		cout << "Test erfolgreich";
    	}
    
    }
    

    Wenn ich dann im Programm test eingebe, kommt nicht die Ausgabe:
    Test erflolgreich

    Die Ausgabe: Ihre Eingabe: ---test---
    kommt aber. 😕

    Was mache ich falsch?
    Vielleicht könnt ihr mir helfen.

    tallmarkus



  • Autsch du hast keinen Speicher 🙂

    1. Mit "char eingabe [] = "";" reservierst du automatisch genug Speicher für den String "" - aber nicht für 100 Zeichen. Das heißt dein Programm könnte jederzeit bei der Eingabe mittels cin abstürzen. Tut es aber zum Glück nicht -> Programm funktioniert.

    2. Du hast aber noch ein Problem, C-Strings (also char* bzw. char[]) können nicht mittels == verglichen werden.

    3. Es heißt <iostream> und nicht <iostream.h> dafür schreibst du drunter einstweilen einfach die Zeile "using namespace std;" siehe dazu auch das Codebeispiel unten.

    Lösungsmöglichkeit 1: Du benützt statt den in C++ sowieso nur noch selten angewendeten C-Strings einen eingebauten String:

    #include <iostream> // Neue Headerdatei
    #include <string>
    using namespace std;
    
    int main ()
    {
        string eingabe;
        getline(cin,eingabe); // Dieses getline ist für Variablen vom Typ string
    
        cout << "Eingabe: " << eingabe << endl;
    
        if(eingabe == "test")
            cout << "TEST ERFOLGREICH" << endl;
    
        return 0;
    }
    

    Lösungsmöglichkeit 2: Du verwendest weiterhin C-Strings reservierst aber genug Speicher und vergleichst mit der Funktion strcmp().

    #include <iostream>
    #include <string.h> // Diese Headerfunktion beinhaltet nicht den Typ string sondern Funktionen für C-Strings
    using namespace std;
    
    int main ()
    {
        char* eingabe = new char [100]; // Für 100 Zeichen Platz machen
    
        cin.getline(eingabe,100);
    
        cout << "Eingabe: " << eingabe << endl;
    
        if(strcmp(eingabe,"test") == 0)
            cout << "TEST ERFOLGREICH" << endl;
    
        delete [] eingabe; // Die 100 Zeichen brav wieder löschen
    
        return 0;
    }
    

    Das ist aber alles Standard-C/C++ und hat nichts spezifisches mit der Konsole zu tun -> Verschoben ins C++-Forum!

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke für die schnelle Antwort!
    Es funktioniert jetzt alles bestens.


Anmelden zum Antworten