Frage zur Überprüfung einer Eingabe und goto-Befehl



  • Hey, ich bin absoluter Anfänger in C++ und versuche mich gerade daran ein Programm zu schreiben was mir anhand eines Radius die Fläche eines Kreises herausgibt.

    Dabei überprüfe ich, ob die Eingabe auch wirklich eine Zahl ist.
    Nur habe ich ein Problem: Sobald ich eine falsche Eingabe tätige hängt mein Programm in einer Schleife fest,
    dabei möchte ich doch nur das Programm wieder automatisch von vorne starten...

    Hier ist mein Code:

    #include <iostream>
    #include <float.h>
    #include <stdlib.h>
    #include <math.h>

    using namespace std;

    int main()

    {
    A:

    float Radius;
    float Flaeche;
    
    cout << "Bitte Radius eingeben" << endl;
    cin >> Radius;
    
    if(cin.fail()){
    	cout << "Die Eingabe muss eine Zahl sein" << endl;
    	fflush(stdin);
    	goto A;
    }
    else{
    	Flaeche = Radius * Radius * 3.14;
    	cout << "Die Flaeche ist "<< Flaeche << endl;
    }
    

    }

    Ich wäre euch sehr dankbar wenn Ihr mir sagen könntet wie ich so eine Schleife verhindere und woran es liegt dass ich in eine Schleife komme, Vielen Dank im Vorraus!

    mfg Niklas



  • @xniklas27 sagte in Frage zur Überprüfung einer Eingabe und goto-Befehl:

    Hey, ich bin absoluter Anfänger in C++

    Wie lernst du? Du benutzt C-Header. goto sollte grundsätzlich vermieden werden, einem Anfäger sollte es nicht gezeigt werden.

    Eingabefehler auf der Kommandozeile vollständig und richtig zu behandeln dürfte den Aufwand eher selten wert sein.

    Du musst den Fehler in cin zurücksetzten und den fehlerhaften Text aus der Eingabe löschen. Eine hingedengelte Version deines Programms:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    
    {
     A:
        float Radius;
        float Flaeche;
    
        cout << "Bitte Radius eingeben" << endl;
        cin >> Radius;
    
        if(cin.fail()){
    	cout << "Die Eingabe muss eine Zahl sein" << endl;
    	cin.clear();
    	std::string s;
    	std::getline(std::cin, s);
    	goto A;
        }
        else{
    	Flaeche = Radius * Radius * 3.14;
    	cout << "Die Flaeche ist "<< Flaeche << endl;
        }
    }
    
    


  • hey Vielen Dank du hast mir sehr weitergeholfen, ich wusste echt nicht mehr weiter 😃
    Ich lerne an C++ an der Hochschule, bin aber auch erst im 1 Semester und versuchs mir größtenteils selbst beizubringen und blick durch vieles noch nicht so ganz durch


Anmelden zum Antworten