Komme nicht weiter "Frage/Antwort" Programm



  • Hallo,

    Was ist hier falsch?

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    { 
     string gut;
     string schlecht;
     string eingabe;
    
     cout << "\nHallo, wie geht es Dir? "; cin >> eingabe;
    
     if (eingabe==gut)
     {
     cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
    
       if (eingabe==schlecht)
    
        {
          cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
         } 
       }
         else  
    
         cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
    
         return 0;
    
      }
    

    Das Programm soll so ausführen, wenn ich eingebe "gut" dann zu mir sagt "Schoen das es Die gut geht". Genauso auch wie mit "schlecht". Leider gibt mir das Programm immer die Antwort "Wort kenne ich nicht aus". 😕



  • naja ich weiss ja nicht recht, aber hast du denn schon eine Idee, ich denke so einige hier haben keine lust Lösungen zu verschenken bzw anderen das denken abzunehmen.. nunja gehts dir denn um den lerneffekt ?
    wenn ja überleg doch mal was du in den ifs vergleichst



  • Ich bin jetzt einen kleinen Schritt weitergekommen und zwar habe ich vollgendes ergänzt:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    { 
     string positiv = "gut";  // ergänzung
     string negativ = "schlecht";  // ergänzung
     string eingabe;
    
     cout << "\nHallo, wie geht es Dir? "; cin >> eingabe;
    
     if (eingabe==positiv)
     {
     cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
    
       if (eingabe==negativ)
    
        {
          cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
         }
        }
         else 
    
         cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
    
         return 0;
    
      }
    

    Jetzt klappt das mit der "if (eingabe==gut)" Aweisung, aber immer noch nicht die "if (eingabe==negativ)" Anweisung!

    Ich glaube ich mach mal ne Denkpause, mein Kopf der qualmt schon! Wäre nett wenn mir jemand weiterhelfen würde, vielleicht fehlt ein Befehl was ich noch nicht kenne, da ich noch in der Anfängerphase bin.

    Danke
    Alex N.



  • Ok, da das ein Problem ist, welches ich lösen kann, will ich dir auch gerne helfen.

    Doch als erstes noch etwas "psychologisches". Wahrscheinlich hast du gerade ein Brett vorm Kopf, da du die Lösung eigentlich schon selbst in deinem zweiten Programm hast.
    Guck nochmal GENAU hin, WIE du die strings definiert hast.

    Ansonsnten wenn du gar nicht weiterweisst:

    if(eingabe==gut) //EDITED
    

    Ich weiss zwar nicht WAS genau C++ da vergleicht.
    Was du aber verglichen haben möchtest ist:

    if(eingabe=="gut") //EDITED
    

    nämlich ein String.
    Und den musst du durch die " " kennzeichnen.
    Was du ja auch schon in deiner zweiten Version, jedoch an "falscher" Stelle 😉 gemacht hast.

    @Edit, sorry hatte die variablennamen aus deinem zweiten Beispielcode aus den Augenwinkeln übernommen. So sollte es funktionieren.

    p.s. Horray for the EditButton.



  • na das ist doch schon mal gut, nun schau dir noch mal deine if abfragen an.

    if (eingabe==positiv)
     {
     cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
    
       if (eingabe==negativ)
    
        {
          cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
         }
     }
    
    .........
    else
         cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
    

    wie man sieht kontrollierst du ob die eingabe positiv ist wenn nein... ...hui gehst du in den else bereich ? ich denke das ist nicht was du willst, denn sonst prüfst du nur obs schlecht geht, wenn die eingabe positiv ist..

    hoffe mit dem tip bekommst du es hin



  • @Freak, tja da haben wohl wir beide ein psychologisches Problem. Denn deine Version klappt leider auch nicht. Mach mal dein Compiler startklar und lass mal diesen Code kompilieren, wirst du schon sehen.
    [EDIT]
    Weil der String "positiv" zu positiv deklariert wurde, ist es egal ob ich schreibe if (eingabe=="positiv") oder if (eingabe==positiv), da kommt das ein und das selbe Ergebnis heraus.

    @shapeless, kannste mal Klartext schreiben? Verstehe ich immer noch nicht so ganz.



  • AlexNeumann schrieb:

    egal ob ich schreibe if (eingabe=="positiv") oder if (eingabe==positiv), da kommt das ein und das selbe Ergebnis heraus.

    bestimmt 😉

    ...
    int main()
        { 
        string positiv("positiv");
        string negativ("negativ");
        string eingabe;
    ...
    


  • AlexNeumann schrieb:

    @shapeless, kannste mal Klartext schreiben? Verstehe ich immer noch nicht so ganz.

    Bin zwar nicht shapeless, aber ich hoffe, du haust mich deswegen nicht. 🙂

    Er meinte, dass du deine If-Blöcke falsch verschachtelt hast. Denn wenn die Eingabe "positiv" ist, wird überprüft, ob die Eingabe negativ ist, was sie ja aber nie sein wird.

    if (eingabe==positiv) {
        cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; 
    } else if (eingabe==negativ) { 
        cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; 
    } else {      
        cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; 
    }
    


  • du hast die if abfragen geschachtelt. das ist Unsinn in diesem Fall. Denn du willst ja auf "schlecht " prüfen wenn es nicht gut ist . du testes aber nur wenns schon positiv ist und das muss immer falsch sein.
    Bsp
    input=schlecht
    if(input==gut){...}
    else
    falsche eingabe
    wie du siehst kannst du nicht auf "schlecht prüfen

    Sinnvoll wäre

    input
    if(input==gut)
    else if(input==schlecht)
    else

    hoffe es ist nun klarer

    //edit thx masterofx32 ..gg ist nicht schlimm .. gute nacht ^^



  • Ahhh die Seite ist wieder erreichbar, bin aber froh.

    Danke für den Tipp zu "else if", es klappt diesmal. Ich bin zwar vorher auch schon gekommen, aber die Anweisungsblöcke haben noch nicht so richtig gepasst.
    Je mehr Anweisungsblöcke hinzukommen, um so mehr blicke ich nicht mehr durch! 😕 . Naja Anfängerphase 😃 . Ich habe auch schon in anderen Foren gepostet und da wurde mir geholfen. Hier jetzt mal der Update:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    { 
     string positiv = "gut";
     string negativ = "schlecht";
     char eingabe[255];   
    
     cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n');
    
     if (eingabe==positiv)
     {
     cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
            }
        else if (eingabe==negativ)   
    
          {
    
          cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
         } 
         else 
         {
         cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
          }       
         return 0;
    
      }
    

    Ich habe dann zuzüglich "String eingabe;" gegen "char eingabe[255]" getauscht und die Anweisung "cin >> eingabe;" gegen "cin.getline(eingabe, 255, '\n'" damit auch ein Text mit Leerzeichen erkannt wird. Find ich praktischer.

    Nun möchte ich noch herausfinden, wie man mehere Wörter zu positiv und negativ deklariert. Ich meine mit Arrays oder Klassen, aber damit beschäftige ich mich später, sonst wird dass zu viel für mich aufeinmal.



  • 1te möglichkeit )

    hmm du könntest einfach mehrere wörter in einen string schreiben und dann mittels "find" suchen.
    bsp:
    std::string gut("gut passt ok japp perfekt bestens");
    if((gut.find(eingabe)) != ende von gut)
    dann gut
    else if( schlecht.find ...... )
    dann schlecht
    else
    etwas anderes

    2te)
    ein array von strings gut definieren

    in einer schleife durchlaufen und mit der eingabe vergleichen
    wenns gefunden wird "positive ausgabe" und beenden

    sonst
    mit schleife für schlechte werte durchlaufen ... wie oben verfahren.

    sonst
    falsche eingabe



  • AlexNeumann schrieb:

    Je mehr Anweisungsblöcke hinzukommen, um so mehr blicke ich nicht mehr durch! 😕 . Naja Anfängerphase 😃 .

    Du solltest dir gleich angewöhnen, deinen Code richtig einzurücken. Bei jedem neuen Block rückst du mit Tab einmal ein und dann sind die Verschachtelungen auch auf den ersten Blick sichtbar. Wohin du die geschweiften Klammern setzt ist Geschmackssache, da gäbe es diese beiden meistgenutzten Arten:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    { 
        string positiv = "gut";
        string negativ = "schlecht";
        char eingabe[255];   
    
        cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n');
    
        if (eingabe==positiv) {
            cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
        } else if (eingabe==negativ) {
            cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
        } else {
            cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
        }       
        return 0;
    
    }
    
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    { 
        string positiv = "gut";
        string negativ = "schlecht";
        char eingabe[255];   
    
        cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n');
    
        if (eingabe==positiv)
        {
            cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
        }
        else if (eingabe==negativ)
        {
            cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
        }
        else
        {
            cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
        }       
        return 0;
    
    }
    


  • Ich habe noch ne Variante. Das ist aber nicht von mir, sondern aus dem anderen Forum. Diesmal mit Erweiterter deklaration.

    #define NUMPOSANTW 4 //anzahl der positiven antworten
    #define NUMNEGANTW 2 //anzahl der negativen antworten
    
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
     string positiv[NUMPOSANTW] = { "gut", "supi", "toll", "klasse" };
     string negativ[NUMNEGANTW] = { "schlecht", "mies" };
     string eingabe;
     int i =0;
    
     cout << "\nHallo, wie geht es Dir? "; cin >> eingabe;
    
     for(i=0;i<NUMPOSANTW;i++) {
         if(eingabe == positiv[i]) {
            cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
            return 0;
         }
     }
    
     for(i=0;i<NUMNEGANTW;i++) {
         if(eingabe == negativ[i]) {
            cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
            return 0;
         }
     }
     cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
     return 0;
    }
    

    Allerdings meldet der Borland Compiler eine Warnmeldung aus, dass die Zeile 12 betrifft. Aber das Programm ist ausführbar.

    Nun meine Frage: Ist dieser Quellcode gültig trotz der Warnmeldung?



  • Wenn es "NUR" eine Warnung ist, kannst DU natürlich weitermachen, aber man sollte auch Warnungen schon ernst nehmen und den code dann prüfen.
    Und dann solltest Du schon zeigen, welches Deine "Zeile 12" ist.



  • wahrscheinlich

    int i = 0;
    
    // sollte sein ;
    
    int i;
    //...
    
    i= 0;
    


  • HannsW schrieb:

    Wenn es "NUR" eine Warnung ist, kannst DU natürlich weitermachen, aber man sollte auch Warnungen schon ernst nehmen und den code dann prüfen.
    Und dann solltest Du schon zeigen, welches Deine "Zeile 12" ist.

    Dann zähl doch mal. Ok, ich helfe dir. Und zwar geht es um die Deklaration "int i = 0".



  • HannsW schrieb:

    wahrscheinlich

    int i = 0;
    
    // sollte sein ;
    
    int i;
    //...
    
    i= 0;
    

    Ob ich schreibe "int i = 0;" oder "int i" und nächste Zeile "i = 0", ist doch das selbe!
    Oder schreib ich schwachsinn?



  • Welche Warnung gibt er denn aus ?? ( Dein Compiler)



  • HannsW schrieb:

    Welche Warnung gibt er denn aus ?? ( Dein Compiler)

    Sowas:

    @Admin,
    Hier fehlt noch'nen [img] BBCode.



  • Das ist auch Quatsch was du da machst. Du initialisierst i mit 0 und zwei Zeilen später nochmal. Mach es (auch in Zukunft) doch einfach so:

    #define NUMPOSANTW 4 //anzahl der positiven antworten
    #define NUMNEGANTW 2 //anzahl der negativen antworten
    
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
     string positiv[NUMPOSANTW] = { "gut", "supi", "toll", "klasse" };
     string negativ[NUMNEGANTW] = { "schlecht", "mies" };
     string eingabe;
    
     cout << "\nHallo, wie geht es Dir? "; cin >> eingabe;
    
     for(int i=0;i<NUMPOSANTW;i++) {
         if(eingabe == positiv[i]) {
            cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl;
            return 0;
         }
     }
    
     for(int i=0;i<NUMNEGANTW;i++) {
         if(eingabe == negativ[i]) {
            cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl;
            return 0;
         }
     }
     cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
     return 0;
    }
    

Anmelden zum Antworten