Komme nicht weiter "Frage/Antwort" Programm



  • 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


  • Mod

    Bitte keine uralten Threads sinnlos hervorholen. Bitte einen Thread pro Frage. Die Tatsache, dass dieser Thread gegen Regel 2 verstößt entbindet nicht von Regel 1.


Anmelden zum Antworten