isdigit()
dient zum Testen, ob ein Zeichen ein Ziffernzeichen ist.
Wenn Sie es als isdigit('9')
aufgerufen haben, würde es ungleich null zurückgeben.
Im ASCII-Zeichensatz (den Sie wahrscheinlich verwenden) steht 9 für die horizontale Registerkarte, die keine Ziffer ist.
Da Sie die I / O-Streams für die Eingabe verwenden, müssen Sie isdigit()
nicht verwenden, um die Eingabe zu validieren. Die Extraktion (d. H.% Co_de%) schlägt fehl, wenn die aus dem Stream gelesenen Daten nicht gültig sind. Wenn Sie also einen int erwarten und der Benutzer "asdf" eingibt, schlägt die Extraktion fehl.
Wenn die Extraktion fehlschlägt, wird das Fehlerbit im Stream gesetzt. Sie können dies testen und den Fehler behandeln:
%Vor%Beachten Sie, dass die Extraktion selbst auch den Stream zurückgibt, so dass Sie die ersten zwei Zeilen einfach verkürzen können:
%Vor%und das Ergebnis wird dasselbe sein.
isdigit()
nimmt eine int
, die die Darstellung des Charakters darstellt. Zeichen 9 ist (vorausgesetzt Sie verwenden ASCII) das TAB -Zeichen. Zeichen 0x39 oder '9' ( nicht 9) ist das tatsächliche Zeichen, das die Ziffer 9 darstellt.
Die Ziffern sind Integer-Codes 0x30 bis 0x39 (oder 48 bis 57) in ASCII - ich wiederhole dies, da ASCII keine Anforderung des ISO C-Standards ist. Daher der folgende Code:
%Vor% was ich vorher gesehen habe, ist keine gute Idee für Portabilität, da es mindestens eine Implementierung gibt, die EBCDIC unter den Abdeckungen verwendet - isdigit
ist die beste Option in allen Situationen.
isdigit()
arbeitet mit Zeichen, nicht mit ASCII-Werten, die Sie gerade übergeben. Verwenden Sie isdigit('9')
.
Tags und Links c++