Frage von aznGirl, 75

Für welche Werte erhalte ich die Ausgabe 1 (s. Bild)?

Ich habe schon einige (verschiedene) Werte ausprobiert, bekomme jedoch immer die 2. Meldung.

Was müsste ich eingeben, um die 1. zu erhalten?

Antwort
von ralphdieter, 4

long hat mindestens 32 Bit; heutzutage sind 64 Bit weit verbreitet.

Versuch's also mal mit 9223372036854775807 -- diese 19 Stellen passen gerade noch so in die Eingabe (20 Zeichen inkl. \0).

Für ein Minuszeichen bei LONG_MIN ist wohl kein Platz mehr. Die letzte Ziffer wird dann erst im nächsten Durchlauf gelesen.

Antwort
von priesterlein, 28

Dazu musst du selber nachschauen, welchen Wertebereich long auf dem von dir zum Kompilieren benutzten System hat. Schau doch einfach nach den Definitionen, wenn du schon mal den Quelltext hast.

Kommentar von aznGirl ,

Also theoretisch geht der Wertebereich von -2147483648..2147483647. Dann müsste die 1. Meldung doch kommen, wenn ich z.B. 2147483647 eingebe, oder?

Kommentar von priesterlein ,

Ich weiß es nicht, was die Funktion daraus macht. Gib doch mal einen Wert außerhalb des Wertebereichs ein. Diese ungültigen Zahlen sind in der Funktion so definiert, dass sie diese Grenzwerte zurückgeben. BItte schaue dir, wenn du programmierst, immer die Definitionen der Funktionen an, die du verwendest.

Beispiel: http://www.cplusplus.com/reference/cstdlib/strtol/

Zitat aus dem Beispiel: "If the value read is out of the range of representable values by a long int, the function returns LONG_MAX or LONG_MIN (defined in <climits>), and errno is set to ERANGE."

Da steckt auch der Hinweis drin, sich ebenfalls die errno anzusehen.

Kommentar von aznGirl ,

Also ich habe es für 2147483647 probiert und für die darauf folgende Zahl. Da passiert nichts, das Programm erwartet lediglich die nächste Eingabe.

Das hier habe ich nicht programmiert. Es ist im Skript enthalten und dient zur Veranschaulichung. 

Kommentar von priesterlein ,

Nasaman gab dir doch den Rat, mal diese defines auszugeben. Das kann niemand sonst für dich machen und dann siehst du, wie diese heißen. "Zahl außerhalb" auszugeben ohne die errno abzufragen, lässt vermuten, dass der Ersteller dieses Beispiels auch keine Ahnung hatte.

Antwort
von Nasaman, 46

Ist jetzt aber nicht dein ernst oder? Wie in der if steht musst du LONG_MAX oder LONG_MIN eingeben. Also der höhste oder niedrigste long wert. Google ist dein Freund wie hoch der genau ist. Weiss niemand auswendig

Kommentar von aznGirl ,

Ja, ist klar. Der Wertebereich von long beträgt  -2147483647 .. 2147483647. Wenn ich die Zahl direkt eingebe, dann passiert nichts. Deswegen bin ich etwas verwundert, ob ich irgendetwas übersehen habe.

Kommentar von Nasaman ,

Wenn du den Wertebereich von google hast dann probier mal einfach LONG_MAX zu printen. vielleicht stimmt es ja nicht überein

Keine passende Antwort gefunden?

Fragen Sie die Community