C++ Beginner Hilfe bzgl. Schleifen gesucht

  • Heyho stagetwo,
    da ich auf einem Informationstechnischen Gymnasium muss ich mit C++ programmieren.
    Ich muss im moment ein Programm zu Rechteckberechnung machen und Schleifen benutzen.
    Aber ich stecke leider fest, es klappt zwar, dass das Programm den Flächeninhalt oder den Umfang berechnet.
    Ich schaffe es nur nicht, nach einer Fehlermeldung durch eine falsche Eingabe, auf eine neue Eingabe zu kommen.
    goto dürfen wir leider nicht benutzen :)


    Am besten ihr schaut euch das mal selber an:


    Bei der Menüsteuerung werden nur die Zahlen 1-3 angenommen, wenn ich aber die 4 eingebe soll das Programm mich nochmal zur Eingabe lassen.
    Wenn mir jemand helfen würde, wäre ich ihm sehr dankbar! :)


    mfg
    __RyD3R__

  • Das kannst du locker flockig mit einer Schleife lösen. Einfach durchloopen, solange die Bedingung

    Code
    1. (izahl < 1) || (izahl > 3)

    erfüllt ist.


    BTW:
    - using namespace std; ist zu vermeiden
    - printf("Die Laenge: ",ilaenge); Du verwendest ilaenge, ohne das ilaenge eine vernünftige Initialisierung besitzt
    - scanf_s benutzen, oder gleich std::cin gepaart mit std::cout
    - SYSTEM()-Calls gilt es ebenso zu vermeiden. Der Kompatibilität wegen. Abhilfe schafft hier std::cin.get() oder getchar()
    - Die if-Abfragen kannst du durch switch-case ersetzen. Ich glaube, es lohnt sich ab ca. 3 Abfragen, bin mir mit der Zahl aber nicht ganz sicher. Der Performance schadet es jedenfalls nie :P

  • using namespace std ist meiner meinung nach nur im header zu vermeiden, in der cpp ist es ok, natürlich immer je nach kontext. aber sobald eine klasse so groß wird, dass es nicht mehr einwandfrei ist, sollte man eh zwei klassen daraus machen, siehe clean code etc.


    mach nen try-catch block in deine schleife, dann sollte das weitergehen. entweder du gibst ne ordentliche meldung aus, was immer gut ist, oder du verschluckst den fehler, was in dem minibeispiel von dir nicht so schlimm ist.

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)





    Skill ist, wenn Luck zur Gewohnheit wird

  • Hi, danke für die Antworten :)
    Ich verstehe aber leider irgendwie nicht wie ich zurück auf den Scanf Befehl komme bei einer falschen Eingabe.
    Gibt es dafür extra einen Befehl außer goto? Was hat es mit return auf sich?
    Edit: Mit switch-case wär das natürlich auch möglich, aber ich würde es gerne mal so versuchen :)

  • Wage nicht mal daran zu denken, zu denken goto wäre eine denkbare Lösung (oder so ? xD). Dann kommt die richtige Lösung von ganz alleine :)


    Wie wärs mit ein bischen Pseudocode?

    Code
    1. tue {
    2. eingabe_lesen()
    3. eingabe_prüfen()
    4. } solange (eingabe nicht ok)
    5. eingabe_verarbeiten()


    Im Falle einer falschen Eingabe wird der Eingabevorgang wiederholt denn die Schleife wird ja nicht verlassen. Erst wenn die Eingabe ok ist, wird die Verarbeitung des Wertes gestartet.

  • Hi,
    es scheitert an der Umsetzung ich weiß nicht wieso ich es nicht hinkriege :help: 
    Ist das überhaupt möglich bei dem bereits geschrieben Programm von mir?
    Oder habe ich da schon einen Fehler gemacht damit ich nicht mehr bei einer falschen Eingabe zur erneuten Eingabe komme?
    mfg
    __RyD3R__


  • Edith meint:
    Wenn du wirklich deine Variante mit einer Quadrillion If-Abfragen implementieren möchtest.
    Du brauchst beim else keine Bedingung anhängen, nur wenn das else ein else if ist.