Rumah > pembangunan bahagian belakang > C++ > Mengapakah `cout` Tidak Mencetak Aksara Tidak Ditandatangani dengan betul dalam C ?

Mengapakah `cout` Tidak Mencetak Aksara Tidak Ditandatangani dengan betul dalam C ?

DDD
Lepaskan: 2024-11-27 06:01:08
asal
183 orang telah melayarinya

Why Doesn't `cout` Print Unsigned Characters Correctly in C  ?

cout Gagal Mencetak Aksara Tidak Ditandatangani: Menyelesaikan Isu

Dalam C , isu cout tidak mencetak unsigned char sering dihadapi. Untuk memahami perkara ini, mari kita analisa contoh kod yang disediakan:

#include<iostream>
#include<stdio.h>

using namespace std;

main() {
    unsigned char a;
    a = 1;
    printf("%d", a);
    cout << a;
}
Salin selepas log masuk

Dalam kod ini, pembolehubah aksara a yang tidak ditandatangani diberikan nilai 1. Apabila mencetak a menggunakan printf, hasilnya ialah "1." Walau bagaimanapun, output menggunakan cout << a memaparkan aksara yang kelihatan rawak.

Sebab bagi percanggahan ini ialah aksara yang tidak ditandatangani boleh menyimpan nilai dari 0 hingga 255. Apabila a ialah 1, ia sepadan dengan aksara ASCII yang tidak boleh dicetak 'SOH' (permulaan tajuk). printf mengendalikan aksara tidak boleh cetak secara berbeza daripada cout.

Untuk menentukan sama ada aksara boleh dicetak, gunakan fungsi std::isprint:

std::cout << std::isprint(a) << std::endl;
Salin selepas log masuk

Ini akan mencetak "0", menunjukkan bahawa 'SOH' tidak boleh dicetak.

Untuk memaksa cout mencetak 1, hantarkan ke yang tidak ditandatangani integer:

cout << static_cast<unsigned>(a) << std::endl;
Salin selepas log masuk

Ini akan berjaya mencetak "1."

Memahami perbezaan asas antara printf dan cout dalam mengendalikan aksara tidak boleh cetak adalah penting untuk menyelesaikan isu ini. Selain itu, std::isprint boleh membantu menentukan sama ada aksara perlu dicetak dalam bentuk yang boleh dibaca manusia.

Atas ialah kandungan terperinci Mengapakah `cout` Tidak Mencetak Aksara Tidak Ditandatangani dengan betul dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan