leer funciona fscanf espacios con como cadenas c scanf fgets

funciona - scanf c



Diferencia entre scanf() y fgets() (6)

Cabe señalar que las especificaciones de patrón de scanf permiten límites de ancho de campo:

scanf( " %80s", mybuffer );

Pero, donde printf() permite que el ancho se pase como una variable (con ''*''):

printf( "My name is %*s./n", 20, name );

scanf() no lo hace. (Interpreta el ''*'' como un indicador para suprimir / ignorar el campo por completo.) Lo que significa que terminas haciendo cosas como esta:

#define NAMEWIDTH 40 char buffer[ NAMEWIDTH + 4 ]; ... scanf( " %40x", buffer );

y no hay forma de conectar el ancho del campo 40 en el scanf() con el ancho del búfer 40 en la declaración del búfer.

Quiero saber cuál es la diferencia entre fgets() y scanf() . Estoy usando C como mi plataforma.


Hay multiples diferencias Dos cruciales son:

  • fgets() puede leer desde cualquier archivo abierto, pero scanf() solo lee la entrada estándar.
  • fgets() lee "una línea de texto" de un archivo; scanf() puede usarse para eso, pero también maneja conversiones de cadenas a tipos numéricos integrados.

Muchas personas usarán fgets() para leer una línea de datos y luego usar sscanf() para analizarla.


La principal diferencia radica en el hecho de que scanf no tiene límites en el número de caracteres que se pueden leer (en su uso predeterminado), mientras que fgets tiene un número máximo de caracteres que se pueden leer.

Ver el prototipo de las dos funciones:

char * fgets (char * dest, int size, FILE * stream);

int scanf (const char * format, ...);

Puedes ver que el segundo parámetro de fgets impone para leer como máximo el tamaño char.

Otra diferencia clara es el valor de retorno: fgets devuelve un puntero a dest en caso de éxito; scanf devuelve el número de elementos de entrada coincidentes y asignados con éxito. Luego, la función scanf escanea la entrada de acuerdo con el formato , y lee la entrada de la secuencia estándar de entrada estándar , mientras que fgets lee la entrada de la secuencia FILE * de manera predeterminada.

En conclusión, podría usar scanf para leer datos de un ARCHIVO e insertarlos en una matriz de tamaño fijo (por ejemplo) no tiene mucho sentido. Una ventaja de scanf es el formato de los datos de salida: si la función lee 12345/n , la salida es 12345 , mientras que fgets lee y devuelve hasta /n (incluido), agregando un /0 al final como un terminador de cadena.



scanf analiza una cadena que leyó (o creó), y fgets lee una línea desde un ARCHIVO abierto *. ¿O te refieres a fscanf?


int scanf(const char * restrict format, ...);

scanf (3) busca cierto patrón definido por el argumento de formato en la entrada dada conocida como stdin , donde usted define el patrón. La entrada dada a scanf (3) , dependiendo de su variante (scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf), podría ser una cadena o un archivo.

char *fgets(char * restrict str, int size, FILE * restrict stream);

fgets (3) simplemente lee una línea de la secuencia del archivo de entrada y copia los bytes como una cadena de terminación nula al str de búfer y limita la salida al búfer a los bytes dados en tamaño .