
Envoyé par
Preez
le programme qui pose problème <...>
Ton code présente un comportement indéfini. (pas de prototype pour les fonctions variadics. C'est obligatoire).
Project : Forums
Compiler : GNU GCC Compiler (called directly)
Directory : C:\dev\forums\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c: In function `main':
main.c:6: warning: implicit declaration of function `scanf'
main.c:12: warning: implicit declaration of function `printf'
Linking console executable: C:\dev\forums\forums.exe
Process terminated with status 0 (0 minutes, 4 seconds)
0 errors, 2 warnings
Il manque <stdio.h>
Le comportement du programme est conforme aux attentes.
Quand on tape 0 1 2 3 4, les caractères :
{'0', ' ', '1', ' ', '2', ' ', '3', ' ', '4', '\n'}
sont entrés dans stdin.
Lorsque scanf() est appelé avec %ld, il cherche à convertir ce qu'il peut jusqu'au premier séparateur (ici, ESPACE ou ' ').
Le '0' est donc extrait et converti dans phrase (drôle de nom pour un entier...)
Il reste donc dans stdin :
{' ', '1', ' ', '2', ' ', '3', ' ', '4', '\n'}
Ensuite, une boucle lit les caractères un par un et affiche ce qui est lu sauf ' ' qui est remplacé par '_', et le '\n', car on s'arrête dès qu'on le detecte (attention, la fin de lecture n'est pas testée).
Il n'y a donc aucun mystère, les caractères suivants sont envoyés vers stdout :
{'_', '1', '_', '2', '_', '3', '_', '4'}
ce qui donne bien :
Partager