Hilfe bei simpler Fehlerkontrolle



  • Hallo liebe Programmier-Community,

    als angehender Informatiker habe ich nun auch angefangen in die Welt des Programmierens einzutauchen. Und wie jeder, dem es mal ähnlich ging oder geht wissen wird gibt es da eine ganze Latte von Stolpersteinen, die man zu umschiffen lernen muss. Deswegen wende ich mich jetzt einfach mal an euch mit der Bitte um Rat.

    Ich habe nämlich ein Problem mit einem simplen Fehlerabfang. Möchte eine Zahl(size_t) über cin einlesen und diese danach per if-Anweisung überprüfen um ggf. eine Falscheingabe abzufangen. Das sieht bei mir so aus:

    // Eingabeaufforderung, Einlesen, Fehlerkontrolle
      cout << "Bitte eine nicht negative ganze Zahl eingeben: ";
      cin >> z;
      if (cin.fail()){
        cerr << endl << "### Falsche Zahl eingegeben" << endl;
        return 1;
      }
      if (!z) return 0;
      cout << endl;
    

    Genauso habe ich es auch gelernt, nur das Problem ist: Er macht nichts. Fehler werden nicht erkannt. Und ich habe wirklich keine Ahnung woran das liegen kann, da ich ja wie gesagt noch blutiger Anfänger bin. Habe schon herumprobiert und gebastelt und gemacht, jedoch ohne Erfolg. Bin also mit meinem wenigen Latein am Ende.

    Könnte jemand so nett sein und mir einen Hinweis geben was damit nicht in Ordnung sein könnte?

    Vielen Dank im Voraus und schönes Wochenende an alle

    Virulenz



  • Was für Fehler willst du genau abfangen? Falscheingaben im Sinne davon, dass jemand einen string eingibt, oder nur eine nicht negative Zahl?

    Zweiteres kannst du so nicht abfangen, weil das einlesen ganz normal funktioniert.



  • mit cin.fail() fängst du diese Art von Falscheingaben ab wenn jemand zum Beispiel einen Buchstaben eingibt statt einer Zahl:

    int a;
    cout<<"geben Sie eine Ganzzahl ein!\n";
    cin>>a;
    
    if(cin.fail())//es wurde zum Beispiel ein Buchstabe eingegeben
    {
    cout<<"fehler bei der Eingabe; bitte geben Sie nur Ganzzahlen ein!\n";
    }
    

    ansonsten kannst du auch allgemein prüfen ob die richtig eingegebene Zahl negativ ist:

    int a;
    cout<<"geben Sie eine positive Ganzzahl ein!\n";
    cin>>a;
    if(a<0)//wenn a negativ ist
    {
    cout<<"Fehler, bitte eine positive Zahl eingeben!\n";
    }
    

    mfg,
    andi01.



  • Hallo.

    Danke and euch beide schonmal für die Hilfe. Es funktioniert jetzt soweit, auch wenn ich nicht viel geändert habe...

    Aber da sind mir auch gleich noch zwei Dinge aufgefallen, wo ihr mir evtl weiterhelfen könntet.

    1. was hat es mit "cerr" auf sich? Soweit ich weiss dient das bei einem "echten" Fehler dazu dass auf jeden Fall noch eine Ausgabe erscheint? Oder wie habe ich das zu verstehen? Bzw. warum würde man das nutzen anstatt "cout"?

    2. Um nochmal auf den Tip zu sprechen zu kommen mit dem Abfangen einer negativen Zahl. Bei mir sieht das jetzt so aus:

    // Eingabeaufforderung, Einlesen, Fehlerkontrolle
      cout << "Bitte eine nicht negative ganze Zahl eingeben: ";
      cin >> z;
      if ( z < 0 ) {
        cerr << "### Bitte keine negativen Zahlen verwenden!" << endl;
      return 1;
      }
    
      if (cin.fail()){
        cerr << endl << "### Eingabe Falsch, Ende!!!" << endl;
        return 1;
      }
      if (!z) return 0;
      cout << endl;
    

    Wenn ich dann aber eine negative Zahl eingebe bekomme ich die Meldung "### EingabeFalsch, Ende!!!", sollte das aber nicht vorher schon abgefangen werden über die Bedingung in der ersten if-Anweisung und mir die entsprechende Nachricht ausgeben? Verstehe ich nicht so ganz.

    Also vielleicht könnt ihr mir ja dabei auch weiterhelfen.

    Vielen Dank aber nochmal an dieser Stelle für die Hilfe!!!

    lg

    Virulenz



  • cerr
    Da stehts "standard error stream".
    Zu deiner Frage, von welchem Typ ist z? Zufällig unsigned int? Wenn ja, ist es logisch, denn unsigned int kann keine negativen Zahlen abspeichern.



  • Ahh verstehe. z ist vom Typ size_t. Verstanden 😃

    Vielen Dank!


Anmelden zum Antworten