Heim >Backend-Entwicklung >C++ >Ist „isdigit(c)' für die Eingabe „char' oder „int' konzipiert? Eine detaillierte Untersuchung.
isdigit(c) – Welcher Datentyp sollte die Eingabevariable sein?
Einführung:
Wann Bei der Arbeit mit zeichenbasierten Eingaben ist es wichtig zu bestimmen, ob es sich bei einer bestimmten Eingabe um eine Ziffer handelt. Die Funktion isdigit() ist ein häufig verwendetes Werkzeug für diesen Zweck, wirft jedoch die Frage auf: Soll die Eingabevariable ein Zeichen (char) oder eine Ganzzahl (int) sein?
Zeicheneingabe und Stream Status:
Cin wird zum Lesen von Zeicheneingaben verwendet. Es ist jedoch wichtig zu prüfen, ob der Stream gültig ist, bevor die Eingabe verwendet wird. Wenn der Stream geschlossen ist, kehrt cin möglicherweise zurück, ohne die Eingabevariable zu ändern, sodass sie nicht initialisiert bleibt.
isdigit()-Vertrag und Implementierung:
Die C-Funktion isdigit() erwartet eine Ganzzahl Argument. Dieses Design basiert auf der ursprünglichen C-Funktion getchar(), die einen int zurückgibt, um Zeichencodes und Fehlerstatus anzuzeigen. Daher geht isdigit() davon aus, dass es sich bei der Eingabe um ein vorzeichenloses Zeichen handelt, das in int umgewandelt wurde.
Vorzeichen von Zeichen:
In C kann einfaches Zeichen je nach Vorzeichen entweder vorzeichenbehaftet oder vorzeichenlos sein über die Implementierung des Compilers. In den meisten Fällen ist es unterschrieben. Dies führt zu einem Kompatibilitätsproblem bei der Verwendung von getchar() und der Funktionsfamilie isdigit().
Negative Werte in vorzeichenbehafteten Zeichen können mit dem EOF-Indikatorwert in Konflikt geraten, was zu möglichen Überschneidungen und undefiniertem Verhalten führen kann. Um dies zu vermeiden, sollte isdigit() mit der Eingabeumwandlung als (unsigned char) aufgerufen werden.
Codebeispiel:
<code class="c++">#include <iostream> #include <ctype.h> int main() { char c; cout << "Please enter a digit: "; cin >> c; if (isdigit((unsigned char)c)) cout << "You entered a digit" << endl; else cout << "You entered a non-digit value" << endl; return 0; }</code>
Das obige ist der detaillierte Inhalt vonIst „isdigit(c)' für die Eingabe „char' oder „int' konzipiert? Eine detaillierte Untersuchung.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!