Komme nicht weiter "Frage/Antwort" Programm



  • 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;
    }
    


  • AlexNeumann schrieb:

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

    Bitte nicht "nen" 🙂

    Dass es kein img-Tag gibt wird wohl schon kein Versehen sein sondern soll das Forum vor Smiley- und Bildüberflutung bewahren.



  • na Ja
    in Zeile 12 sagst Du

    int i =0;
    

    dann gibst du was aus, und danach

    for(i=0;i<NUMPOSANTW;i++) { 
      // ...
    

    d.h. Du verwendest i erst in der FOR-Schleife. Also ist dein erstes "= 0" überflüssig. Der Compiler setzt hier schon nen Wert= Mehrarbeit.

    Ist doch sehr freundlich vom compiler??
    Es könnte ja auch sein, daß Du irgendlwelche "Leichen" aus alten Varianten vergessen hast.



  • asdrubael schrieb:

    //...
     for(int i=0;i<NUMNEGANTW;i++) {
    //..}
    

    Dann gelten die int i aber immer nur in der Schleife. Ist mein Code größer, und ich brauche sowas öfter, dann ist die variante "int i;" schon ok ??



  • Ich persönliche halte es für eine schlechte Idee eine überall im Programm sichtbare Zählvariable zu erstellen.



  • In einen zweidimensionalen Feld mit 10 spalten und 10 zeilen soll das kleine Einmalein gespeichert werden.
    Das gesamte Feld ist mit seinen Inhalten aus zu geben.
    Um einen bessere Lesbarkeit zu erreichen, ist nach jeder Ausgabe mit der Ausgabe
    " \t " ein Tab (Tabulator) zu setzten, Gleichzeitig ist in der schleife die Summe aller Feldinhalte zu berechnen.
    Einen Ausgabe der summe ist nicht gewünscht.Teile des Programms hat ein kollege bereits erstellt und soll von Ihnen nur ergänzt werden.



  • Frat Moh schrieb:

    In einen zweidimensionalen Feld mit 10 spalten und 10 zeilen soll das kleine Einmalein gespeichert werden.
    Das gesamte Feld ist mit seinen Inhalten aus zu geben.
    Um einen bessere Lesbarkeit zu erreichen, ist nach jeder Ausgabe mit der Ausgabe
    " \t " ein Tab (Tabulator) zu setzten, Gleichzeitig ist in der schleife die Summe aller Feldinhalte zu berechnen.
    Einen Ausgabe der summe ist nicht gewünscht.Teile des Programms hat ein kollege bereits erstellt und soll von Ihnen nur ergänzt werden.



  • #include <iostream>

    using namespace std;

    void main() {

    cout << endl;

    for (int aussen = 1; aussen <= 10; aussen++) {

    for (int innen = 1; innen <= 10; innen++) {

    cout << aussen * innen << "\t";
    }

    cout << endl;
    }

    }



  • Frat schrieb:

    In einen zweidimensionalen Feld mit 10 spalten und 10 zeilen soll das kleine Einmalein gespeichert werden.

    Wo ist das Feld?

    Frat schrieb:

    void main() {

    Wer hat dir das beigebracht?

    Frat schrieb:

    Gleichzeitig ist in der schleife die Summe aller Feldinhalte zu berechnen.

    😕

    Teile die Aufgabe in Funktionen auf.
    - Berechnung/Feld füllen
    - Ausgabe


Anmelden zum Antworten