Saya tidak pernah mengerti bagaimana cara mencetak unsigned long
datatype dalam C.
Misalkan unsigned_foo
adalah unsigned long
, maka saya coba:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
Dan mereka semua mencetak semacam -123123123
nomor alih-alih unsigned long
yang saya miliki.
c
printf
long-integer
unsigned
format-specifiers
bodacydo
sumber
sumber
%lu
kerjakan kali ini. Terima kasih. Sesuatu yang lain pasti telah terjadi sebelumnya dan itu tidak berhasil.%lu
. Secara teknis itu adalah perilaku yang tidak terdefinisi tetapi dalam kenyataannya variabel memiliki nilai tak terduga yang diteruskan ke printf yang printf kemudian ditafsirkan sebagai tidak ditandatangani. Saya menduga masalah asli bodacydo adalah aliran mencapai panggilan printf yang salah, bukan yang dimaksudkan ...%lu
, pecah adalah:%
- memulai "spesifikasi konversi";l
- pengubah panjang,l
berarti "[tidak ditandatangani] long int";u
- specifier konversi,u
adalah untukunsigned int
dicetak sebagai desimal. Karena kami memberi pengubah panjangl
, maka ia menerimaunsigned long int
. Surat-surat harus dalam urutan: persen, panjang, konversi. (Ada beberapa opsi lagi, seperti lebar dan presisi, yang dapat Anda tambahkan. Lihat halaman manual , karena mendokumentasikan semua ini dengan tepat!)%lu
untuk panjang unsigned%llu
untuk unsigned lama lamasumber
Untuk int
%d
Untuk int panjang
%ld
Untuk int panjang
%lld
Untuk int panjang tanpa tanda tangan
%llu
sumber
Dari semua kombinasi yang Anda coba,
%ld
dan%lu
hanya kombinasi yang merupakan penentu format printf yang valid sama sekali.%lu
(panjang unsigned desimal),%lx
atau%lX
(hex panjang dengan huruf kecil atau huruf besar), dan%lo
(oktal panjang) adalah satu-satunya penentu format yang valid untuk variabel tipe unsigned long (tentu saja Anda dapat menambahkan lebar bidang, ketepatan, dll. pengubah antara%
danl
).sumber
printf
ditentukan untuk memerlukan jenis argumen yang tepat tanpa tunjangan yangva_arg
seharusnya.Ini akan sangat membantu. . .
sumber
Formatnya adalah
%lu
.Silakan periksa tentang berbagai tipe data lainnya dan penggunaannya di printf di sini
sumber
Specifier yang benar untuk lama tak bertanda adalah
%lu
.Jika Anda tidak mendapatkan nilai persis yang Anda harapkan maka mungkin ada beberapa masalah dalam kode Anda.
Silakan salin kode Anda di sini. Maka mungkin seseorang dapat memberi tahu Anda dengan lebih baik apa masalahnya.
sumber
Saya memiliki masalah yang sama. Coba "% ul", itu bekerja untuk saya.
sumber