Kontrollieren ob die Eingabe eine Zahl ist
-
Tja, danebengeraten.
Ich hab mir das einfach nur vom Namen abgelitten. Wär auch mal wieder viel zu verständlich, dass streamsize = Größe des Eingabepuffers ist (ist der etwa "beliebig" lang oder was?).
-
cooky451 schrieb:
numeric_limits<streamsize>::max() ist ein Sonderwert, bei dem der Stream beliebig lang ignoriert. (Bis man auf das entsprechende Zeichen trifft.)
Wieso sollte das ein Sonderwert sein? Das ist ein Integerwert. Der ignoriert bestimmt nichts. Incognito hat es genau richtig beschrieben, zumindest bis dahin, wo er sagt, dass eh niemand so viel eingibt. Dafür gibts dann ja den Delimiter.
-
Tachyon schrieb:
cooky451 schrieb:
numeric_limits<streamsize>::max() ist ein Sonderwert, bei dem der Stream beliebig lang ignoriert. (Bis man auf das entsprechende Zeichen trifft.)
Wieso sollte das ein Sonderwert sein?
streamsizeist eintypedefaufint/long. Vielleicht prüft ja internistream::ignoreaufn = numeric_limits<streamsize>::max()(und falls das wahr ist, wird beliebig lang ignoriert). Plausibel wärs.
Sonst hat icognito aber auch nur halb Recht; Ich empfehle ihm den Satz von Murphy.
-
Hacker schrieb:
Tachyon schrieb:
cooky451 schrieb:
numeric_limits<streamsize>::max() ist ein Sonderwert, bei dem der Stream beliebig lang ignoriert. (Bis man auf das entsprechende Zeichen trifft.)
Wieso sollte das ein Sonderwert sein?
streamsizeist eintypedefaufint/long. Vielleicht prüft ja internistream::ignoreaufn = numeric_limits<streamsize>::max()(und falls das wahr ist, wird beliebig lang ignoriert). Plausibel wärs.
Sonst hat icognito aber auch nur halb Recht; Ich empfehle ihm den Satz von Murphy.Plausibel wäre, dass der Stream einfach nicht mehr aufnehmen kann, als der Endwert des Typs zur Repräsentation der Größe angibt. Da der Stream nicht aufnehmen kann kann, muss man dann auch nicht beliebig lange ignorieren, sondern eben nur so lange, bis nicht die maximal mögliche Kapazität erreicht wurde.
Was der Stream dann damit vielleicht macht, ist Spekulation und vermutlich implementierungsabhängig.
-
Tachyon schrieb:
Was der Stream dann damit vielleicht macht, ist Spekulation und vermutlich implementierungsabhängig.
Es gibt da so ein Dokument, das nennt sich C++-Standard. Sollte man mal überflogen haben. Da muss sich die Implementierung dran halten. Dann muss man auch nicht spekulieren oder sich selber zusammenreimen.
cooky451 hat natürlich Recht.
-
SeppJ schrieb:
[...]Es gibt da so ein Dokument, das nennt sich C++-Standard. [...]
Dann les' noch mal. Wie Du aus der Aussage im Standard cookies Aussage ableitest, ist mir nicht ganz klar.
-
Tachyon schrieb:
SeppJ schrieb:
[...]Es gibt da so ein Dokument, das nennt sich C++-Standard. [...]
Dann les' noch mal. Wie Du aus der Aussage im Standard cookies Aussage ableitest, ist mir nicht ganz klar.
Siehe 27.7.2.3, Klausel 25, 1. Punkt. Das ist eine Implikation.
(Edit)
C++-Standard schrieb:
Characters are extracted until
any of the following occurs:
- if n != numeric_limits<streamsize>::max() (18.3.2), n characters are extracted
-
Und das impliziert, wenn
n == numeric_limits<streamsize>::max()wird beliebig lange konsumiert? Das halte ich doch für eine sehr gewagte Implikation.
-
Tachyon schrieb:
Und das impliziert, wenn
n == numeric_limits<streamsize>::max()wird beliebig lange konsumiert? Das halte ich doch für eine sehr gewagte Implikation.
Was ist daran gewagt? Das ist handfeste Logik.Da steht: Wenn nicht (B und C), dann A. Mit B "n erreicht" und " C "n ist nicht max" und A "es wird weiter extrahiert". Daraus folgt: Wenn nicht C, dann A.
-
Na gut. Hast recht. Man (ich) sollte vielleicht alles lesen, und nicht nur die Beschreibung der Sonderfälle.