Int Zahl Überlauf??



  • Original erstellt von hakkinen:
    **Hallo
    Ich darf leider keinen String benutzen.

    Sondern die Zahl MUSS als Integer eingelesen werden**

    Wieso ? Angst vor Bufferoverflow ? Oder weswegen.
    Du musst die Eingabe ja irgendwie speichern, entweder im
    int -> keine Überprüfung möglich oder im
    string -> Überprüfung möglich



  • Weil so die Aufgabenstellung von meinem Prof lautet.

    "Zahl muß als Integer eingelesen werden und Programm soll auf Fehleingaben überprüfen"

    Eine Fehleingabe ist für mich z.B. eine zu große Zahl



  • Dann ignorier die Aufgabenstellung und mach es richtig. Oder schmeiss dem Prof die Aufgabenstellung an den Kopf.



  • einlesen als int ist rein technisch gesehen sowieso nicht möglich, da alles
    erst als char interpretiert wird... und da du daher sowieso nur das eingegebene
    checkst ohne es in einen string umwandeln zu müssen verstösst daswohl auch nicht gegen die aufgabenstellung deines prof 🙂



  • Wie du siehst, fällt es vielen schwer, mal in eine Doku zu sehen.

    Das will dir dein Prof. wohl beibringen.

    scanf liefert einen Rückgabewert, der die Anzahl der fehlerfrei gelesenen Felder enthält. Diesen kannst du auswerten.



  • scanf betrachtet zu lange Zahlen aber nicht als Fehler.



  • Hi,

    bei nem Ueberlauf wird doch das Overflow-Flag gesetzt, man koennte dieses
    auswerten.

    mfg
    v R



  • Was für ein Overflow-Flag? Das vom Prozessor? In ANSI-C? Nach scanf?



  • Jo,

    meinte das vom Prozessor. Das muesste doch gesetzt werden, wenn es zu einem
    ueberlauf kommt, oder etwa nur, wenn man irgendwelche Berechnungen oder
    Vergleiche macht?

    Ist _asm kein Bestandteil von ANSI-C?

    mfg
    v R



  • Das ist viel zu low-level, um es auf scanf anzuwenden. Dazu müßtest du den Maschinencode der Implementierung kennen. Das OF wird ja nicht nur beim Überlauf gesetzt, sondern auch bei der nächsten Berechnung, die keinen Überlauf produziert, rückgesetzt. Also selbst wenn tatsächlich mal OF gesetzt ist, weißt du nach scanf nicht, ob es da entstanden ist wo du denkst.

    BTW _asm ist nicht ANSI-C. asm ist ein C++-Schlüsselwort, aber welcher Assembler wie eingebunden wird, steht nicht im Standard.



  • Hmmm...da hast du allerdings recht. Daran hab ich gar nicht gedacht, scanf
    kann einem ja bereits dazwischenfunken.

    Ich denke mal, dass es dann nicht moeglich ist, zu pruefen ob ein Overflow
    stattgefunden hat, ausser man liesst die Zahl als Text ein, dann entsteht
    natuerlich kein Overflow, da es ja lediglich Text ist.

    Man koennte die Zahl, welche man als Text einliesst, mit dem C-String
    von itoa ( INT_MAX ); vergleiche, allerdings ist itoa kein ANSI-C (laut meiner
    Doku). Da er aber keine C-Strings verwenden darf...

    Tjo, sonst wuesste ich nicht wie.

    mfg
    v R


Anmelden zum Antworten