2010-03-24 20 views
23

de los siguientes tres funciones:getc Vs Vs getchar Scanf para leer un carácter de stdin

getc getchar & scanf

que es el mejor para la lectura de un carácter de la entrada estándar y por qué?

¿Existen desventajas o limitaciones conocidas para alguna de estas funciones que hace que una sea mejor que la otra?

Respuesta

25

Si simplemente desea leer un solo carácter de stdin, entonces getchar() es la opción adecuada. Si tiene requisitos más complicados, entonces getchar() no será suficiente.

  • getc() le permite leer de una corriente diferente (por ejemplo, uno abierto con fopen());
  • scanf() le permite leer más de un solo carácter a la vez.

El error más común cuando se utiliza getchar() es tratar de utilizar una variable char para almacenar el resultado. Debe utilizar una variable int, ya que el rango de valores getchar() devuelve un "valor en el rango de unsigned char, más el valor negativo único EOF". Una variable char no tiene suficiente rango para esto, lo que puede significar que puede confundir una devolución de caracteres completamente válida con EOF. Lo mismo se aplica al getc().

+1

Gracias por la respuesta. En scanf si solo doy% c, entonces debería poder leer solo un caracter ¿verdad? – Jay

+0

Sí, pero es excesivo para ese propósito. – caf

+2

Seriamente excesivo. En muchas plataformas, getchar() es una macro que devuelve rápidamente un carácter (con una secuencia amortiguada), o usa fread() para obtener un carácter. Con scanf(), hay mucho trabajo innecesario. – tomlogic

5

from Beej's Guide to C Programming

Todas estas funciones de una manera u otra, leer un solo carácter desde la consola o desde un archivo. Las diferencias son bastante menores, y aquí están las descripciones:

getc() devuelve un carácter del ARCHIVO especificado. Desde un punto de vista de uso , es equivalente a la misma llamada fgetc(), y fgetc() es un poco más común de ver. Solo la implementación de las dos funciones es diferente.

fgetc() devuelve un carácter del ARCHIVO especificado. Desde el punto de vista de uso , es equivalente a la misma llamada getc(), excepto que fgetc() es un poco más común de ver. Solo la implementación de las dos funciones del es diferente.

Sí, hice trampa y usé cortar y pegar para hacer ese último párrafo.

getchar() devuelve un caracter de stdin. De hecho, es lo mismo que llamando a getc (stdin).

Cuestiones relacionadas