Yanıtlar:
Bunun gibi bir çift '%' göndererek kaçabilirsiniz: %%
Örneğinizi kullanma:
printf("hello%%");
'%' İşaretinden kaçmak sadece printf içindir. Yaparsan:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Yazdırılacak: This is a's value: %%
%özgüdür printf, değil mi?
\045 parçası olan ve derlendiğinde dönüşecek olan derleme zamanı kaçışıdır. bir çalışma zamanı işlevidir, bu nedenle C kaynak koduyla değil dizenizin baytlarıyla ilgilenir ve işlevin parçaları olan kendi kaçış dizilerine sahiptir . Kısacası, "bir dilin içindeki dil" dir ve aynı sonucu verir . %printfprintfprintf("This is a's value: %s\n", a);printf("This is a's value: \045\0163\012", a);
printf("hello%c", '%');. Ancak, %%başka bir argüman kullanmadığı için daha iyidir.
Diğerlerinin söylediği gibi, %%% 'den kaçacaktır.
Ancak, bunu asla yapmamanız gerektiğini unutmayın:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Bir dizeyi her yazdırmanız gerektiğinde, her zaman, her zaman, her zaman
printf("%s", c)
gömülü bir% 'nin soruna neden olmasını önlemek için [bellek ihlalleri, segfault vb.]
Dizede biçim yoksa, puts(veya fputs) öğesini kullanabilirsiniz :
puts("hello%");
dizede bir biçim varsa:
printf("%.2f%%", 53.2);
Yorumlarda belirtildiği gibi , çıktıya putsa ekler \nve fputseklemez.
puts. putsDizeleri basmayı hiç düşünmedim ve doğrudan atladım printf. Artık değil.
Kendisi ile ...
printf("hello%%"); /* like this */
Nitpick: (ve ) işlev ailesi için biçimi belirten dizede
gerçekten kaçmazsınız .%printf()scanf()
%İçinde printf()(ve scanf()fonksiyonların) ailesi, bir dönüşüm şartname başlar. Dönüştürme belirtimi kurallarından biri, %bir dönüşüm belirteci olarak ( %dönüştürme belirtimini başlatan hemen sonra ) bir '%'karakterin dönüştürülmüş argüman olmadan yazılmasına neden olduğunu belirtir .
Dizenin içinde gerçekten 2 '%'karakter vardır (kaçan karakterlerin aksine: "a\bc"3 boş karakter olmayan "a%%b"bir dizedir; 4 boş karakter olmayan bir dizedir).
C'deki ters eğik çizgi, dizelerdeki karakterlerden kaçmak için kullanılır. Dizeler% 'i özel bir karakter olarak tanımaz ve bu nedenle kaçış gerekmez. Printf başka bir konudur: %% öğesini yazdırmak için %% kullanın.
Kullanabilirsiniz %%:
printf("100%%");
Sonuç:
100%
%%yazdırmak için kullanmanız gereken yanlış biçim belirteci kullanıyorsunuz %. Kodunuz:
printf("hello%%");
Sadece %iki kez kullanabilirsiniz , yani"%%"
Misal:
printf("You gave me 12.3 %% of profit");