Hilfe bei Programm für Anfänger



  • Hallo und willkommen,

    zu 1: Dies ist in einem Konsolenprogramm etwas schwieriger, da man nicht z.B. einfach ESC abfragen kann.
    Entweder du fragst jedesmal nach, ob noch weiter abgefragt werden soll (z.B. j/ n) oder aber du nutzt die Besonderheit des Streams cin, daß ungültige Eingaben (z.B. Buchstaben oder Sonderzeichen) bei der Zahleneingabe zu einem Fehlerzustand führen:

    while (cin)
    {
       // ...
       do
    
       while(cin && !validateuserguss(guess, result));
    }
    
    // Ungültige Zeichen aus dem Stream überlesen und Fehlerzustand des Streams löschen
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')); // #include <limits> wird noch benötigt
    cin.clear();
    

    (am besten die unteren Zeilen in eine eigene Funktion packen, damit du sie mehrmals - ohne C&P - nutzen kannst).

    Alternativ könntest du auch einfach eine Zählschleife (für z.B. max 10 Rechnungen) verwenden.

    zu 2:
    Du rufst ja innerhalb von randomnumber() jedesmal Maxnumber() auf, so daß jedesmal die Abfrage kommt - diese solltest du nur einmalig (vor der Rechenschleife) erfragen und in einer Variablen merken und diese dann in randomnumber() als Parameter benutzen:

    int randomnumber(int maxnumber)
    {
        return rand() % maxnumber + 1;
    }
    

    Du gibst außerdem bisher in randomnumber() innerhalb der Schleife sofort mit return randnum[i]; diesen Wert (mit Index 0) zurück (ohne die Schleife weiterabzuarbeiten) - diese Schleife ist also hier unnötig!

    PS: Außerdem, wie @DocShoe schon geschrieben, verwendest du bisher älteres C++ (das sog. C++98) - seit C++11 gibt es modernere Funktionalitäten, s.a. Weiterentwicklung der Programmiersprache C++ nach 2005.



  • Danke für die schnellen Antworten @DocShoe und @Th69!
    Das hört sich ja alles sehr vielversprechend an. C++11 muss ich mir mal anschauen. Die Tutorialreihe die ich gerade schaue, ist in C++98 gehalten. Deshalb hab ich mich daran orientiert. Wie gesagt, bin erst seit knapp 4 Tagen dabei und bin froh, dass ich überhaupt schon einmal was zum Laufen bekommen habe 😃



  • @Ceejay Ich würde dir raten, die Tutorial Reihe abzubrechen. Heute programmiert man an vielen Stellen doch ganz anders als man es mit C++98 gemacht hat, da muss man nicht die historische Entwicklung mitmachen. Leider kann ich spontan kein gutes "modernes" C++ Tutorial empfehlen, aber in den letzten 20 Jahren ist viel passiert.



  • @Schlangenmensch Ich werde es rein fürs Grundverständniss einmal durchgehen. Kann ja nichts schaden. Die Videos sind super verständlich erklärt und gerade für die generellen Zusammenhänge mal zu durchblicken habe ich bis jetzt nichts besseres gefunden. Ich bin ja auch erst bei Video 11 von 72. Vielleicht kommt da ja auch noch was.



  • @Ceejay

    Das Problem wird sein, dass sich Paradigmen komplett verändert haben, ganz besonders bei der Verwaltung von Resourcen. Das C++98 Tutorial wird dir erklären, wie man Speicher mit new allokiert und mit delete wieder freigibt, dass man Speicher nicht mehrfach freigeben darf und aber auch sicherstellen muss, dass der Speicher wieder freigegeben wird. C++11 erklärt dir dann, dass man nicht mehr explizit macht, sondern per RAII in smart pointer verpackt. Der Unterschied ist nicht nur ein bisschen anders, sondern die Methodik hat sich geändert, und diese Methodik wird mit C++98 nicht erklärt. Durch das C++98 Tutorial erfährst du nicht, wie man heute C++ programmiert.



  • @DocShoe Danke für die Info. Dann macht es wohl doch wenig Sinn da weiterzumachen. Du kennst nicht zufällig gut verständliches Tutorial für Anfänger?
    Edit: Hab mich jetzt mal durch ein paar spätere Videos geklickt. Hier wird wohl doch mit C++11 gearbeitet, soweit ich das erkennen kann. In den ersten Videos geht es auch explizit nur um Grundlagen wie Schleifen, etc. Deshalb ist das wohl noch sehr einfach gehalten. Kann ich also doch weitermachen 😃



  • @Ceejay Wie heißt denn das Tutorial. Dann könnten wir aus interesse da auch mal rein gucken und das eventuell besser einschätzen. Vielleicht kennt sogar jemand den, der das Tutorial hält.



  • @Schlangenmensch ist auf YouTube von einem Benutzer namens Pilzschaf.
    Hier mal der Klink:
    https://youtube.com/playlist?list=PLStQc0GqppuVs05kWvLBoHcWCULX3ueIM&si=fV5cEljQT9T3IlLx



  • @Ceejay

    Ich finde die Videoserie von Bytes'n'Objects ganz gut.
    Hab gerade auch mal in die Pilzschaf Videoserie reingeguckt, die scheint auch ok zu sein. Anfangs holt er immer etwas aus und demonstriert an altem C-Code, was C++ besser macht.



  • @Ceejay Hm, von einem ersten reinschauen, bin ich didaktisch nicht überzeugt. Zeiger, C-Strings, Plain Arrays,Old School for-Loops und new + delete, vor std::string, std::vector, std::array und range based for loops, würde ich so nicht unterrichten.
    Ein weitere Punkt, den ich nicht so schön finde ist, dass überall Ein und Ausgaben gemacht werden. Ich weiß, dass das den Anfang einfacher macht, aber aus professioneller Sicht, würde ich Ein/Ausgabe direkt zu Anfang von dem Rest trennen, das macht es einfacher irgendwann mal mit Unit Tests anzufangen (was ich deutlich mehr zu Anfang unterrichten würde).


Anmelden zum Antworten