2010-03-24 24 views
23

Parmi les fonctions ci-dessous trois:getc Vs getchar Vs Scanf pour lire un caractère de stdin

getc getchar & scanf

qui est le meilleur pour la lecture d'un personnage de stdin et pourquoi?

Y a-t-il des inconvénients connus ou des limitations pour l'une de ces fonctions qui fait l'un mieux que l'autre?

Répondre

25

Si vous voulez simplement lire un seul caractère à partir de stdin, alors getchar() est le choix approprié. Si vous avez des exigences plus compliquées, alors getchar() ne suffira pas.

  • getc() vous permet de lire à partir d'un autre flux (par exemple, on a ouvert avec fopen());
  • scanf() vous permet de lire plus d'un seul caractère à la fois.

L'erreur la plus courante lors de l'utilisation getchar() est d'essayer d'utiliser une variable char pour stocker le résultat. Vous devez utiliser une variable int, car la plage de valeurs getchar() renvoie "une valeur comprise entre unsigned char et la valeur négative unique EOF". Une variable char n'a pas une plage suffisante pour cela, ce qui peut signifier que vous pouvez confondre un retour de caractère entièrement valide avec EOF. La même chose s'applique à getc().

+1

Merci pour la réponse. Dans scanf si je ne donne que% c, alors je devrais être capable de lire seulement un caractère à droite? – Jay

+0

Oui, mais c'est exagéré dans ce but. – caf

+2

Sérieusement exagéré. Sur de nombreuses plateformes, getchar() est une macro qui retourne rapidement un caractère (avec un flux tamponné), ou utilise fread() pour obtenir un caractère. Avec scanf(), il y a beaucoup de travail inutile. – tomlogic

5

from Beej's Guide to C Programming

Toutes ces fonctions d'une manière ou d'une autre, lire un seul caractère de la console ou d'un fichier. Les différences sont assez mineures, et voici les descriptions:

getc() retourne un caractère du FICHIER spécifié. D'un point de vue d'utilisation, c'est l'équivalent du même appel fgetc(), et fgetc() est un peu plus commun à voir . Seule l'implémentation des deux fonctions diffère. Fgetc() renvoie un caractère du FICHIER spécifié.

D'un point de vue utilisation, c'est équivalent au même appel getc(), sauf que fgetc() est un peu plus commun à voir. Seule l'implémentation des deux fonctions diffère.

Oui, j'ai triché et j'ai utilisé cut-n-paste pour faire ce dernier paragraphe. Getchar() renvoie un caractère de stdin.

En fait, c'est la même chose que appelant getc (stdin).