2013-07-21 317 views
22

Sono un principiante in C e mi chiedevo perché questo programma non stampa% segno?Come si stampa il segno di percentuale (%) in c

Il codice è:

#include<stdio.h> 

main() 
{ 
    printf("%"); 
    getch(); 
} 
+3

Così hai letto la documentazione? Che cosa ha detto del segno di percentuale? –

+0

Questa domanda può essere facilmente risolta tramite Google. L'OP avrebbe potuto usare la sua logica, cioè (''//') è la costante di carattere per '/' e l'ha applicata. Non c'è anche una pagina man su 'printf'? – TheBlueCat

+1

Forse intendevi dire che ''\\'' è la costante di carattere per '\'? La costante di carattere per '/' è ''/''. –

risposta

47

Il tuo problema è che si deve cambiare:

printf("%"); 

a

printf("%%"); 

Oppure si potrebbe usare il codice ASCII e scrivere:

printf("%c", 37); 

:)

+6

C non richiede ASCII. 'printf ("% c ", 37);' non è portatile. –

+1

@ H2CO3 sì ma mi piace la risposta perché ha dato un trucco in più! –

+0

@GrijeshChauhan Non ho detto che la risposta non mi è piaciuta, è una buona risposta. Ho solo sottolineato che il frammento di cui sopra non è portatile. –

7

Usa "%%". Il man page descrive questo requisito:

% Un '%' è scritto. Nessun argomento è convertito. La specifica di conversione completa è '%%'.

0

provare a stampare in questo modo

printf("%%"); 
+1

Questa risposta potrebbe essere più utile di quella. Non fornisce alcun riferimento che permetta ai lettori di conoscere i loro errori. – Diti

12

non c'è alcuna spiegazione in questa discussione perché per stampare un segno di percentuale si deve digitare %% e non per esempio fuggire personaggio con percentuali - \%.

da comp.lang.c FAQ list · Question 12.6:

La ragione è difficile da stampare% segni con printf è che% è essenzialmente di printf carattere di escape. Ogni volta che printf vede un%, lo si aspetta che sia seguito da un personaggio che gli dice cosa fare dopo. La sequenza di due caratteri %% è definita per stampare una singola%.

Per comprendere il motivo per cui \% non può funzionare, ricordate che il backslash \ è carattere di escape della del compilatore, e controlla come il compilatore interpreta caratteri del codice sorgente in fase di compilazione. In questo caso, tuttavia, vogliamo per controllare come printf interpreta la sua stringa di formato in fase di esecuzione. Per quanto riguarda il come compilatore, la sequenza di escape \% non è definita, e probabilmente produce un singolo carattere%. Sarebbe improbabile per sia \ che% per passare a printf, anche se printf era preparato per trattare \ specialmente.

quindi il motivo per cui uno deve digitare printf("%%"); per stampare il singolo% è ciò che è definito nella funzione printf. % è un carattere di escape di printf e \ del compilatore.

+0

Grazie per l'offerta del motivo. –