Dans le cadre d'une tâche des devoirs, j'essaie de lire un seul Char de STDIN et d'agir selon elle:
$ ./run please enter [y]es, [n]o or [m]aybe: y<return> you selected yes! Please enter only 'y', 'n' or 'm'! $ ./run please enter [y]es, [n]o or [m]aybe: yes<return> you selected yes! Please enter only 'y', 'n' or 'm'! Please enter only 'y', 'n' or 'm'! Please enter only 'y', 'n' or 'm'! $
4 Réponses :
Vous avez besoin d'un espace entre et vous avez également besoin de à utiliser et choisir, pas le choix! p> Edit: pendant que vous y êtes, vous voudrez peut-être examiner scanf (" code> et le
% c code> pour fonctionner correctement:
faire tandis que () code> pour cette boucle (à moins que le professeur ait dit spécifiquement Utilisez un
break code>) -
en fonction de code> fonctionne bien lors de la validation de l'entrée utilisateur! p> p>
Jusqu'à ce que vous obteniez une entrée inattendue; Essayez d'entrer "y x z" par exemple.
Lol quelle légende!
mieux encore, utilisez fgetc (). Scanf () devrait toujours être un dernier recours. P>
tandis que la solution "espace avant% C" peut fonctionner lorsque l'utilisateur entre dans les données attendues, elle échouera à bien des égards; Essayez d'entrer "y n y n" par exemple. L'entrée de la console est orientée ligne; Votre meilleur pari est de vous assurer de supprimer la ligne entière ainsi: p> fflush () code> n'est pas défini par ISO C pour les flux d'entrée. Il est défini dans la bibliothèque d'exécution C Microsoft, mais n'est pas portable.
Tout d'abord, je vais le garder bref.parce de points insuffisants pour soumettre un commentaire Si nous pouvons voir que le nombre de O / P est (un + le NON de la Charcter) Ceci est Beacuse lorsque nous appuyons sur Entrée après avoir saisi les personnages '\ n' qui est un caractère non imprimable également ajouté après votre chaîne.
$ ./run please enter [y]es, [n]o or [m]aybe: y<return> you selected yes! Please enter only 'y', 'n' or 'm'! -----------> it is due to reading of the '\n' by scanf
C'est une solution de contournement pour le problème, n'est-ce pas? C'est donc un commentaire à la question (pas une réponse).
N'avez pas suffisamment de points que je voulais mais je ne savais pas que je serai donwnvote pour cela.