Bereichsüberprüfung von Integer und Real



  • Hi!

    Es soll angeblich einen Befehl geben, mit dem man eine Bereichsüberprüfung vornehmen kann wenn man statt einem Inter einen String hat. Also z.B.

    if (int OutOfRange = befehl("9876534231"))
    {
        cout << "is out of range";
    }
    //ebenso:
    if (int OutOfRange = befehl("12512436.3E+4"))
    {
        cout << "is out of range";
    }
    

    Gibt's sowas und wenn ja, wie heisst der Befehl?!

    Danke im voraus!



  • Hi,

    schau mal in der FAQ nach String -> Number Konvertierung.

    Schnell geht es mit atoi(), aber das ist nicht unbedingt schöner Stil und ob er die Exponentialschreibweise unterstützt, musst du auch erst testen.

    ChrisM



  • atoi() & Co sind nette Funktionen, leider prüft die Funktion nicht auf Überläufe!! z.B.:

    int i = atoi("-989999999985");
    	//Ergebnis: i = 2137445391
    

    Aus einer negativen Zahl, die eindeutig zu groß ist wird durch mindestens einen Überlauf eine positive Zahl! Genau dass darf aber nicht passieren! Wie finde ich heraus dass es einen Überlauf gab?



  • schreib ne Funktion, die vorher überprüft, ob die Zahl die schon im streing steht noch im Bereich liegt, bevor du atoi aufrufst! im header <climits> stehen die Bereiche (numeric_limits<int>::min(), bzw max())!



  • vll. mal strtol und friends anschauen



  • Eure Antwort kommt zu spääät! Trotzdem Danke! Hab's doch noch selber rausgefunden!

    Jep! strtol & Co war die Funktion die ich gesucht habe! Dann noch errno abfragen und fertig!


Log in to reply