2011-04-05 4 views
0

Possible en double:
C output question…C question de sortie

Pourquoi son o/p est %% ??

int main(void) 
{ 
    printf("%%%\n"); 
    return 0; 
} 

alors que pour le programme ci-dessous o/p est%?

int main(void) 
{ 
    printf("%%%"); 
    return 0; 
} 

pouvez-vous me dire où est la différence?

+2

Que se passe-t-il lorsque vous l'exécutez? – David

+2

Avez-vous pensé à l'essayer vous-même? – Chris

+0

Avez-vous pensé à lire la documentation de la fonction que vous utilisez? – DevSolar

Répondre

4

C'est un comportement indéfini. La section 7.19.6.1/9 de C99 indique:

Si une spécification de conversion n'est pas valide, le comportement n'est pas défini.

et aucune des sections précédentes n'autorise un spécificateur de conversion d'un espace. Ils sont limités aux caractères de l'ensemble diouxXfFeEgGaAcsPn%.

+0

L'espace est un modificateur valide pour les spécificateurs de conversion, mais '%' n'est pas un caractère suivant valide dans le spécificateur. –

+0

@R: oui, l'espace est un modificateur valide pour les conversions signées mais, comme vous le dites, '%' n'est pas une conversion signée. Je pense que l'un des paragraphes de la norme dit que le '%%' doit être exactement de cette forme (aucun modificateur autorisé). – paxdiablo