Bagaimana Anda keluar dari tanda% saat menggunakan printf
di C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
sumber
sumber
%
khusus untukprintf
, benar?\045
adalah kompilasi waktu melarikan diri yang merupakan bagian dari bahasa dan akan berubah menjadi%
ketika dikompilasi.printf
adalah fungsi run-time, sehingga berhubungan dengan byte dari string Anda, bukan dengan kode sumber C, dan ia memiliki urutan pelarian sendiri yang merupakan bagian dari fungsi . Singkatnya,printf
adalah "bahasa di dalam bahasa", danprintf("This is a's value: %s\n", a);
memberikan hasil yang sama denganprintf("This is a's value: \045\0163\012", a);
.printf("hello%c", '%');
. Namun,%%
lebih baik karena tidak menggunakan argumen lain.Seperti yang orang lain katakan, %% akan lolos dari%.
Namun, perhatikan bahwa Anda tidak boleh melakukan ini:
Setiap kali Anda harus mencetak sebuah string, selalu, selalu, selalu cetak dengan menggunakan
untuk mencegah embedded% dari menyebabkan masalah [pelanggaran memori, segfault, dll]
sumber
Jika tidak ada format dalam string, Anda dapat menggunakan
puts
(ataufputs
):jika ada format dalam string:
Seperti disebutkan dalam komentar,
puts
tambahkan a\n
ke output danfputs
tidak.sumber
puts
. Saya tidak pernah berpikirputs
untuk mencetak string dan langsung melompat ke sanaprintf
. Tidak lagi.Dengan sendirinya ...
sumber
Nitpick:
Anda tidak benar-benar lepas dari
%
string yang menentukan format untuk keluarga fungsiprintf()
(danscanf()
).The
%
, dalam keluarga fungsiprintf()
(danscanf()
), memulai spesifikasi konversi. Salah satu aturan untuk spesifikasi konversi menyatakan bahwa%
sebagai specifier konversi (segera setelah%
yang memulai spesifikasi konversi) menyebabkan'%'
karakter ditulis tanpa argumen yang dikonversi.String benar-benar memiliki 2
'%'
karakter di dalamnya (sebagai lawan dari karakter melarikan diri:"a\bc"
adalah string dengan 3 karakter bukan nol;"a%%b"
adalah string dengan 4 karakter bukan nol).sumber
gunakan %% ganda
sumber
Seperti ini:
sumber
Garis miring terbalik di C digunakan untuk melarikan diri karakter dalam string. String tidak akan mengenali% sebagai karakter khusus, dan oleh karena itu tidak ada jalan keluar yang diperlukan. Printf adalah masalah lain: gunakan %% untuk mencetak satu%.
sumber
Kamu bisa memakai %%:
Hasilnya adalah:
sumber
Anda menggunakan penentu format yang salah yang harus Anda gunakan
%%
untuk mencetak%
. Kode Anda harus:Baca lebih lanjut semua penentu format yang digunakan dalam C .
sumber
Yup, gunakan printf ("hello %%"); dan sudah selesai.
sumber
Anda cukup menggunakan
%
dua kali, yaitu"%%"
Contoh:
sumber
Dobel '%' juga berfungsi di ".Format (...). Contoh (dengan iDrawApertureMask == 87, fCornerRadMask == 0,05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
memberikan nilai yang diinginkan dan diharapkan dari (isi string dalam) csCurrentLine;"% ADD87C, 0,0500 *% "sumber