(Courriels de diversion: <ecorces@alimenterez-premediterait.com> <avorterez@reduisais-pietina.com> <horrifiait@fourvoyant-degroupees.com> <retribueras@indexee-ensembliers.com> <adresserions@plantureux-reconquises.com> <transposais@devinera-plombons.com> <timbrees@elles-debudgetisa.com> <affilage@hamburger-irriguions.com> <recluses@deleguons-faufilerons.com> <rajoutees@aerospatiaux-sombrerais.com> )


Selon tharibo:
> 2005/10/19, Georges Favre :
> >             scanf("%c",&c);
> >             printf("\nJ'ai reçu le caractère %c dans l'adresse
> %p\n\n",c,&c);
>
> scanf fonctionnera mieux avec des chaînes de caractères. Et les
> chaînes en C se terminent par le caractère null. Et comme déjà dit,
> scanf ne contrôle pas le terminal, et le terminal ne lui envoie un
> résultat qu'après appuie sur la touche ENTREE.
>
> En gros, ton "erreur", c'est que tu utilises un char au lieu d'un
> char[] pour stocker le résultat. Je sais bien que &c retourne un
> char*, mais scanf attend un char* dans lequel il mettra un \0 à la
> fin. En fait, il ne faudrait pas utiliser %c seul.
>
> Il n'y a pas de solution satisfaisante sans utiliser de bibliothèque
> tierce. NCurses est un très bon choix, comme déjà proposé.
Je ne suis pas d'accord. À moins que George ne veuille pouvoir saisir un seul
caractère, sans retour à la ligne, la fonction fgets répond très bien à ce
besoin de lecture au clavier.

De toute façon, c'est une règle qui me semblait très claire depuis que j'ai
appris à programmer : scanf => poubelle pour la prod. Tu dois t'attendre à
recevoir de la bouse, donc des chaines de caractères par exemple même si tu
attends un chiffre et ensuite vérifier la saisie dans cette chaîne.

Le gros intérêt de fgets est qu'il est capable de limiter le nombre de
caractères saisis et donc éviter un buffer overflow si l'utilisateur tape plus
de caractères que la taille du buffer que tu as déclaré.

http://www.lri.fr/~aze/page_c/aide_c/fgets.html

Exemple d'utilisation si tu veux récupérer un caractère :

char buf[10];
fgets(buf, 10, stdin);

=> Là tu vérifies buf[0] et si c'est autre chose que le caractère que tu veux,
tu engueules l'utilisateur et tu boucles.

@++

--
Baptiste <Batmat> Mathus
http://batmat.net - BMAthus at Free point fr
---------
Si chacun de nous a une idée et que nous les partageons, nous
repartirons tous les deux avec deux idées... C'est ça le Libre.

--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>