Programm funktioniert nicht(Testprogramm)



  • Hi,ich habe dieses kleine Programm geschrieben(nur um den Umgang mit Arrays zu testen)und nun funktioniert es nicht,wenn ich Gut eingebe dann kommt das ,dass im else steht,warum?Was müsste ich ändern damit es funktioniert,Danke.

    mfg Tommy438

    #include <iostream.h>
    #include <string.h>
    
    int main()
    {
    	char eingabe[10];
    	cout << "Gib ein wie du dieses Programm findest:Gut, Schlecht oder Geht So!\n";
    	cin >> eingabe;
    
    	if(eingabe[10] == 'Gut')
    	{
    		cout << "Finde ich auch.\n";
    	}else
    	{
    		cout << "Ich stimme dir nicht zu.\n";
    	}
    
    }
    


  • Nunja, du hast da was falsch verstanden (glaube ich), ich denke mal du willst mit strings arbeiten, oder? Was du benutzt ist ein Zeiger auf eine Ansammlung von chars. Das ginge ja auch, aber du testest ob der 10. Buchstabe "gut" ist! Das ist natürlich nie der Fall!
    Achja, so funktioniert es: (und ist denke ich auch ganz ordentlich)

    #include <iostream>     //Beide veraltet
    #include <string> 
    using namespace std;        //Damit es trotdem funktioniert
    
    int main() 
    { 
        string eingabe;
        cout << "Gib ein wie du dieses Programm findest:Gut, Schlecht oder Geht So!\n"; 
        cin >> eingabe; 
    
        if(eingabe == "Gut") 
        { 
            cout << "Finde ich auch.\n"; 
        }else 
        { 
            cout << "Ich stimme dir nicht zu.\n"; 
        } 
    
    }
    

    Nochmal Achja: Das ganze konzept ist nicht sehr klug! Stell dir mal vor jemand gibt "Das Programm finde super mega [u.s.w.) gut"



  • 'Gut' ???



  • Ok danke ich habe noch ein paar Fragen muss ich using namespace std; nehmen um "string" benutzen zu können?Wäre das auch mit Arrays möglich?Ich wollte nämlich Arrays "üben".



  • Achso und wenn iostream veraltet ist was soll ich denn dann nutzen?Danke,

    mfg Tommy438



  • --------------------Konfiguration: Testen1 - Win32 Debug--------------------
    Kompilierung läuft...
    Testen1.cpp
    C:\Entwicklungen\Testen\Testen1.cpp(3) : error C2871: 'std' : Existiert nicht oder ist kein Namespace
    C:\Entwicklungen\Testen\Testen1.cpp(7) : error C2065: 'string' : nichtdeklarierter Bezeichner
    C:\Entwicklungen\Testen\Testen1.cpp(7) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'eingabe'
    C:\Entwicklungen\Testen\Testen1.cpp(7) : error C2065: 'eingabe' : nichtdeklarierter Bezeichner
    C:\Entwicklungen\Testen\Testen1.cpp(19) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
    Fehler beim Ausführen von cl.exe.

    Testen1.exe - 4 Fehler, 1 Warnung(en)

    Das ist die Fehlermeldung wenn ich Kompilieren will.



  • @Elise: ok, ich verbessere! War nur copy 'n paste.
    @tommy: iostream.h und string.h sind veraltet, du musst iostream und string verwenden! (ohne .h) Und, ja, du musst using namespace std verwenden wenn du diese dateien verwenden willst (natürlich geht auch: std::string z.b.)
    /OK, les grad dein post! Hab an dem Programm noch ne kleinigkeit verändert ("gut" statt 'gut') Was für einen kompiler hast du? (oder nur vergessen das .h zu löschen?)



  • Ok,jetzt ist die Fehlermeldung nur noch:-------------------Konfiguration: Testen1 - Win32 Debug--------------------
    Kompilierung läuft...
    Testen1.cpp
    c:\entwicklungen\testen\testen1.cpp(11) : error C2676: Binaerer Operator '==' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinier
    ten Operator geeigneten Typ nicht
    c:\entwicklungen\testen\testen1.cpp(19) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
    Fehler beim Ausführen von cl.exe.

    Testen1.exe - 1 Fehler, 1 Warnung(en)



  • Ok jetzt hab ich euch erstmal mit Fehlermeldungen überschüttet 🙂



  • Zur sache mit den Arrays: ja, aber dann brauchst du net string! Allgemein gesehen ist string und vector aber einfacher als array.



  • Erstmal ist nicht iostream veraltet sondern iostream.h ! So wie Ness es zeigt ist es schon ok aber es heißt natürlich "Gut" und nicht 'Gut' . Denn '' ist für einzelne Zeichen/Buchstaben und "" für einen ganzen string.

    Ok wenn du es mit einen char array machen willst ginge z.b. das hier:

    #include <iostream>
    using namespace std; //Zwar nicht die schönste Methode aber erstmal ok
    
    int main()
    {
        char eingabe[10];
        cout << "Gib ein wie du dieses Programm findest:Gut, Schlecht oder Geht So!\n";
        cin >> eingabe;
    
        if( !strcmp(eingabe, "Gut") ) //bzw. if(strcmp(eingabe, "Gut") ==0)
        {
            cout << "Finde ich auch.\n";
        }else
        {
            cout << "Ich stimme dir nicht zu.\n";
        }
    
    }
    

    Du musst strcmp nehmen um char* bzw char[] zu vergleichen, da das normale == nur die Adressen vergleicht aber nicht den Inhalt...



  • if(eingabe == "Gut")
    

    muss heissen

    if(eingabe.compare("Gut") == 0 )
    

    Kurt



  • Ok danke es klappt.



  • @ ZuK
    Muss es nicht 😛



  • habs gerade geändert



  • @ ZuK
    Wenn es aber ein string ist reicht doch == "Gut" ...



  • es scheint ich lebe schon längere zeit im irrtum
    habe wirklich geglaubt der string operator == vergleicht die adressen.
    sorry



  • @ZuK
    Das ist nur bei char* so ... Die string klasse hat ihren == operator dafür überladen 🙂


Anmelden zum Antworten