Vous devez placer entre parenthèses comme:
while((ch = getchar()) != '\n')
Precedence de !=
est supérieure à celle de =
while(ch = getchar() != '\n')
est identique:
while(ch = (getchar() != '\n'))
qui lit un caractère compare avec newline, puis assigne le résultat de la comparaison à ch. Maintenant, le résultat de la comparaison est 0
(quand est entré saut de ligne) ou 1
(quand tout le reste est entré)
CHAR bizarre que vous voyez est la control char avec une valeur 1
, il n'y a pas de symbole imprimable pour ASCII 1, donc Je suppose que c'est le shell qui imprime le char étrange avec la valeur 0001
dedans.
Vous pouvez le confirmer en redirigeant votre sortie de programme à décharge octal (od):
$ echo 'a' | ./a.out | od -bc # user entered 'a'
0000000 122 145 141 144 040 001 012
R e a d 001 \n
here you go ----------------^
$ echo '\n' | ./a.out | od -bc # user entered '\n'
0000000
GCC lorsqu'il est utilisé avec -Wall
vous met en garde contre comme:
warning: suggest parentheses around assignment used as truth value
Si vous utilisiez gcc, assurez-vous que l'indicateur -Wall est défini. Parmi les nombreux problèmes communs, il est celui-ci. – JeremyP