isdigit(c) – Verwendung von char vs. int zur Eingabevalidierung
Bei der Untersuchung Ihres Codes, der darauf abzielt, Benutzereingaben als zu validieren Digit stellt sich die Frage: Was soll der Typ der Eingabevariable sein – char oder int?
Um dieses Dilemma zu verstehen, muss man sich mit den Feinheiten der isdigit-Funktion in C befassen. Im Gegensatz zu seinem Namen erwartet isdigit ein ganzzahliges Argument. Dies wirft Bedenken hinsichtlich der Kompatibilität mit der char-Eingabe auf.
Die Erklärung liegt in der Geschichte von C, insbesondere getchar(), das Zeichen als Ganzzahlen abruft, um sowohl den Zeichencode als auch Fehlercodes (negative Werte, die EOF darstellen) aufzunehmen. Dieses Design führt zu Kompatibilitätsproblemen mit char, das je nach Compiler entweder signiert oder nicht signiert sein kann.
Signiertes char stellt eine Herausforderung dar, da sich negative Werte mit EOF überschneiden, was möglicherweise zu Fehlern führt. Daher erfordern isdigit und verwandte Funktionen eine Eingabe, die als vorzeichenloses Zeichen behandelt wird, um Positivität sicherzustellen.
Um die Kompatibilität sicherzustellen, ändern Sie Ihren Code wie folgt:
<code class="c">if(isdigit((unsigned char)c))</code>
Außerdem ist es wichtig, dies zu überprüfen Der Eingabestream ist vor der Verwendung von c gültig, da ein geschlossener Stream dazu führen könnte, dass er nicht initialisiert wird.
Das obige ist der detaillierte Inhalt vonSollte ich char oder int für die Eingabevalidierung in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!