bool und do-while schleife ist so was ok



  • Das Programm läuft gut kein Problem, ich bin zufrieden mit mir. 🙂

    Doch wie ist es stilistisch, technisch usw. muss ich noch was verändern.
    Denn ich will noch etwas drauf packen, einen Zufallsgenerator. Aber stimmt die Basis?

    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
        int zahl1=0;
        int zahl2=0;
        int ergebnis=0;
        int vergleich=0;
        char antwort;
        bool testBool = true;
    
        do{
            cout <<"Geben sie die erste Zahl ein "<<endl;
            cin >> zahl1;
            cout <<"Geben sie die zweite Zahl ein "<<endl;
            cin >> zahl2;
    
            ergebnis=zahl1+zahl2;
    
            cout<<"Geben sie das vermutete Ergebnis ein "<<endl;
            cin >> vergleich;
    
            if(ergebnis != vergleich)
                {
                     cout << "Leider falsch."<<endl;
                     cout<< "Das richtige Ergebnis lautet: "<<ergebnis<< endl;
                    testBool = false;
                }
    
            if(testBool)
                {
                   cout<< " Richtig, du bist toll "<< endl;
                }
    
            cout << "Noch eine Runde (J/N)? ";
            cin >> antwort;
        }while
            ('J'==antwort || 'j' == antwort);
    
        return 0;
    }
    


  • juhu123 schrieb:

    Das Programm läuft gut kein Problem, ich bin zufrieden mit mir. 🙂

    Doch wie ist es stilistisch, technisch usw. muss ich noch was verändern.
    Denn ich will noch etwas drauf packen, einen Zufallsgenerator. Aber stimmt die Basis?

    1. Falsches Unterforum gewählt, du arbeitest mit C++, nicht mit C++/CLI und dem .Net-Framework.
    2. Stiltechnisch würde ich einiges ändern.

    //...
    int main()
                                      // <-- Unsinniger Abstand
    {
        int zahl1=0;                  // Variablen erst bei erster Verwendung deklarieren
        int zahl2=0;
        int ergebnis=0;
        int vergleich=0;
        char antwort;
        bool testBool = true;         // a) Sprechende Bezeichner wählen
                                      // b) Abstände zwischen Operatioren einheitlich halten
    
        do{                           // Egal welchen Klammerstil: Einheitlich halten
            cout <<"Geben sie die erste Zahl ein "<<endl;
            cin >> zahl1;
            cout <<"Geben sie die zweite Zahl ein "<<endl;
            cin >> zahl2;
    
            ergebnis=zahl1+zahl2;
    
            cout<<"Geben sie das vermutete Ergebnis ein "<<endl;
            cin >> vergleich;
    
            if(ergebnis != vergleich)
                {                     // Und schon wieder ein anderer Einrückungs/Klammerstil
                     cout << "Leider falsch."<<endl;
                     cout<< "Das richtige Ergebnis lautet: "<<ergebnis<< endl;
                    testBool = false; // Identische Einrückung wählen
                }
    
            if(testBool)
                {
                   cout<< " Richtig, du bist toll "<< endl;
                }
    
            cout << "Noch eine Runde (J/N)? ";
            cin >> antwort;
        }while                        // Bei If schreibst du Bedingung in eine Zeile hier trennst du?
            ('J'==antwort || 'j' == antwort);
    
        return 0;                     // Bei main unnötig (return 0 geschieht hier automatisch, wenn nichts anders angegeben
    }
    

    Imho sauberer:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        do
        {
            int zahl1 = 0;
            cin >> zahl1;
            int zahl2 = 0;
            cout << "Geben sie die zweite Zahl ein " << endl;
            cin >> zahl2;
    
            int ergebnis = zahl1 + zahl2;
    
            cout << "Geben sie das vermutete Ergebnis ein " << endl;
            cin >> vergleich;
    
            if(ergebnis == vergleich)
            {
                cout << " Richtig, du bist toll "<< endl;
            }
            else
            {
                cout << "Leider falsch."<<endl;
                cout << "Das richtige Ergebnis lautet: " << ergebnis << endl;
            }
    
            cout << "Noch eine Runde (J/N)? ";
            char antwort;
            cin >> antwort;
        } while('J'==antwort || 'j' == antwort);
    }
    


  • juhu123 schrieb:

    Das Programm läuft gut kein Problem, ich bin zufrieden mit mir. 🙂

    Doch wie ist es stilistisch,

    Vollkatastrophe. Wirf ganz schnell dein C/C++-Buch ganz weit weg, aus dem Du lernst. Das ist rundherum alter umständlicher fehleranfälliger Stil.



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
        do//leider muss die schleifenvariable (hier seltsamerweise antwort) raus
        {
            int zahl1 = 0;//lass das =0 sein, hat hier doch keine bedeutung
            cin >> zahl1;
            int zahl2 = 0;
            cout << "Geben sie die zweite Zahl ein " << endl;//'\n' besser als endl
            cin >> zahl2;
    
            int ergebnis = zahl1 + zahl2;//geht später
    
            cout << "Geben sie das vermutete Ergebnis ein " << endl;
            cin >> vergleich;
    
            bool richtigGeraten = ergebnis == vergleich;//nicht benötigt
            if(ergebnis == vergleich)//if(vergleich==ergebnis)//den interessanten wert links
            {
                cout << " Richtig, du bist toll "<< endl;
            }
            else
            {
                cout << "Leider falsch."<<endl;
                cout << "Das richtige Ergebnis lautet: " << ergebnis << endl;
            }
    
            cout << "Noch eine Runde (J/N)? ";
            char antwort;//antwort, ergebnis, vergleich? die namen gehen noch besser
            cin >> antwort;
        } while('J'==antwort || 'j' == antwort);//den interessanten wert links bitte
    }
    


  • Mein Vorschlag: kein using namespace std;



  • oenone schrieb:

    Mein Vorschlag: kein using namespace std;

    Aus Masochismus? Oder weil Du so viele Andere Biblozheken benutzt, die cout anbieten?



  • Bei
    char antwort;
    brauche ich noch Tipps, Bitte 😞

    ||=== Build: Debug in Imho sauberer (compiler: GNU GCC Compiler) ===|
    C:\Users\juhu123\Documents\testc++\Imho sauberer\main.cpp||In function 'int main()':|
    C:\Users\juhu123\Documents\testc++\Imho sauberer\main.cpp|43|error: 'antwort' was not declared in this scope|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    #include <iostream>
    using namespace std;
    int main()
    {
       // char antwort;
    
        do
        {
            cout <<"Geben sie die erste Zahl ein \n";
            int zahl1;
            cin >> zahl1;
            cout <<"Geben sie die zweite Zahl ein \n";
            int zahl2;
            cin >> zahl2;
    
           int ergebnis=zahl1+zahl2;
    
            cout <<"Geben sie das vermutete Ergebnis ein \n";
            int vergleich;
            cin >> vergleich;
    
            if( vergleich != ergebnis)
    
                {
                     cout << "Leider falsch.\n";
                     cout << "Das richtige Ergebnis lautet: "<<ergebnis<< endl;
    
                }
    
           else
                {
                   cout<< " Richtig, du bist toll \n";
                }
    
            cout << "Noch eine Runde (J/N)? ";
            char antwort;
            cin >> antwort;
        }
        while
    
            ('J'==antwort || 'j' == antwort);
    }
    


  • Deklarierst du antwort in der dowhile -Schleife, so ist diese Variable im Schleifenkopf ( while('J'==antwort || 'j' == antwort) ) nicht sichtbar. Deklariere sie (wie auskommentiert) im Scope von main() .

    Was ist mit ascs und volkards Anmerkungen??



  • ich habe alles durch probiert, glaube ich. Aber ich verstehe nur noch Bahnhof und sehe den Wald vor Bäumen nicht 😞



  • #include <iostream>
    using namespace std;
    int main()
    {
        // char antwort;//Ja, da muss die Variable hin! Leider. 
        do
        {
    …
            cout << "Noch eine Runde (J/N)? ";
            char antwort;//Und hier natürlich weg
            cin >> antwort;
        }
        while(was mit antwort);//ist nämlich außerhalb des do-Blocks
    //das regt mich jedesmal auf. 
    }
    


  • juhu123 schrieb:

    und sehe den Wald vor Bäumen nicht 😞

    Anfänger. 🤡

    Im Info-Studium lernst Du (aber auch in Fachforen), daß jeder Baum ein Wald ist. Ein Wald ist ein kreisfreier Graph. Und ein Baum ist ein zusammenhängender Wald. Problem gelöst: Ab jetzt siehst Du immer auch einen Wald, wenn Du einen Baum siehst.



  • danke ,supper 😃
    gute nacht



  • volkard schrieb:

    // ...
    
    int main()
    {
        // char antwort;//Ja, da muss die Variable hin! Leider. 
        do
        {
    
        // ...
    

    Du verwendest ja auch die falsche Schleife ...

    #include <iostream>
    using namespace std;
    int main()
    {
        // char antwort;//Ja, da muss die Variable hin! Leider. 
        for( char antwort{ 'j' }; antwort == 'j'; cin >> antwort )
        {
            cout << "Noch eine Runde (J/N)? ";
        }
    }
    

Anmelden zum Antworten