Heim >Backend-Entwicklung >C++ >Warum verhält sich „cout' beim Drucken von vorzeichenlosen Zeichenwerten falsch?

Warum verhält sich „cout' beim Drucken von vorzeichenlosen Zeichenwerten falsch?

DDD
DDDOriginal
2024-11-26 21:16:16432Durchsuche

Why Does `cout` Misbehave When Printing Unsigned Char Values?

Fehlverhalten von cout: Warum die Ausgabe von vorzeichenlosen Zeichen zu Verwirrung führt

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.

Problembeschreibung

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?

Antwort

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn