Heim >Backend-Entwicklung >C++ >Warum verhält sich „cout' beim Drucken von vorzeichenlosen Zeichenwerten falsch?
Beim Programmieren kann die Verwendung der Funktion cout zum Drucken von vorzeichenlosen Zeichenwerten manchmal zu unerwarteten Ergebnissen führen. Lassen Sie uns näher auf das Problem eingehen und untersuchen, warum dies geschieht.
Bedenken Sie den folgenden Codeausschnitt:
#include<iostream> #include<stdio.h> using namespace std; main() { unsigned char a; a=1; printf("%d", a); cout<<a; }
Bei der Ausführung gibt dieser Code 1 gefolgt von einigen aus scheinbar zufällige Charaktere. Aber warum verhält sich die Ausgabe so?
Die Verwirrung rührt von dem Zeichen her, das dem ASCII-Wert 1 entspricht. Dieses Zeichen ist ein nicht druckbares Steuerzeichen und normalerweise nicht sichtbar, wenn es angezeigt wird als Text. Infolgedessen gibt cout es als Müll aus. Um dies zu bestätigen, können wir die Funktion isprint verwenden, um zu prüfen, ob das Zeichen druckbar ist:
std::cout << std::isprint(a) << std::endl;
Dadurch wird 0 (falsch) ausgegeben, was anzeigt, dass das Zeichen nicht druckbar ist.
Um das Problem zu beheben und den Wert 1 sowohl in printf als auch in cout anzuzeigen, können wir das vorzeichenlose Zeichen in eine vorzeichenlose Ganzzahl umwandeln:
cout << static_cast<unsigned>(a) << std::endl;
Das obige ist der detaillierte Inhalt vonWarum verhält sich „cout' beim Drucken von vorzeichenlosen Zeichenwerten falsch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!