logo

scanf() y fscanf() en C

En lenguaje C, escaneo() La función se utiliza para leer la entrada formateada desde la entrada estándar. Devuelve el número total de caracteres escritos en él; de lo contrario, devuelve un valor negativo.

Sintaxis:



int scanf(const char *characters_set)>

Complejidad del tiempo: En)

Espacio Auxiliar: O(n) donde n es la longitud de la entrada.

Muchos de nosotros conocemos los usos tradicionales de scanf. Bueno, aquí tienes algunos de los hechos menos conocidos.



código de codificación huffman

¿Cómo leer solo una parte de la entrada que necesitamos?
Por ejemplo, considere un flujo de entrada que contiene solo caracteres seguidos de un número entero o un flotante. Y necesitamos escanear solo ese número entero o flotante.

Ejemplo:

  Input  : 'this is the value 100',    Output  : value read is 100   Input   : 'this is the value 21.2',    Output   : value read is 21.2>
C
// C program to demonstrate that // we can ignore some string // in scanf() #include  int main() {  int a;  scanf('This is the value %d', &a);  printf('Input value read : a = %d', a);  return 0; } // Input : This is the value 100>


Ahora supongamos que no sabemos cuáles son los caracteres anteriores pero seguramente sabemos que el último valor es un número entero. ¿Cómo podemos escanear el último valor como un número entero?



La siguiente solución solo funciona si la cadena de entrada no tiene espacios. Por ejemplo,

Aporte

'blablabla 25'>
C
// C program to demonstrate use of *s #include  int main() {  int a;  scanf('%*s %d', &a);  printf('Input value read : a=%d', a);  return 0; }>

Producción

Input Value read : 25>

Explicación : %*s en scanf se usa para ignorar alguna entrada según sea necesario. En este caso, ignora la entrada hasta el siguiente espacio o nueva línea. De manera similar, si escribe %*d, ignorará los números enteros hasta el siguiente espacio o nueva línea.

Uso general de scanf():

C
// C program to demonstrate general use of scanf() #include  int main() {  int a;  scanf('%d', &a);  printf('a = %d', a);  return 0; }>

Aporte

2>

Producción

emitir una cadena a int java
a = 2>

El hecho anterior puede no parecer un truco útil a primera vista. Para comprender su uso, veamos primero fscanf().

Función fscanf en C

¿Estás cansado de toda la sintaxis torpe para leer archivos? bueno, fscanf viene al rescate. Esta función se utiliza para leer la entrada formateada de la secuencia dada en el lenguaje C.

Sintaxis:

int fscanf(FILE *ptr, const char *format, ...)>

fscanf lee de un archivo señalado por el puntero ARCHIVO (ptr), en lugar de leer del flujo de entrada.

Valor de retorno: Devuelve cero o EOF, si no tiene éxito. De lo contrario, devuelve la cantidad de elementos asignados correctamente.

Complejidad del tiempo: En)

Espacio Auxiliar: O(n) donde n es la longitud de la entrada.

Ejemplo 1: Considere el siguiente archivo de texto abc.txt

NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>

Ahora queremos leer sólo el campo de ciudad del archivo de texto anterior, ignorando todos los demás campos. Una combinación de fscanf y el truco mencionado anteriormente hace esto con facilidad

C
// C Program to demonstrate fscanf #include  // Driver Code int main() {  FILE* ptr = fopen('abc.txt', 'r');  if (ptr == NULL) {  printf('no such file.');  return 0;  }  /* Assuming that abc.txt has content in below  format  NAME AGE CITY  abc 12 hyderabad  bef 25 delhi  cce 65 bangalore */  char buf[100];  while (fscanf(ptr, '%*s %*s %s ', buf) == 1)  printf('%s
', buf);  return 0; }>

Producción

CITY hyderabad delhi bangalore>

Ejemplo 2: Considere el siguiente archivo binario program.bin

n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>

Para leer todos los valores de n1, n2 y n3 del contenedor, estamos usando fscanf()

C
#include  #include  struct threeNum{  int n1, n2, n3; }; int main(){  int n;  struct threeNum num;  FILE *fptr;  if ((fptr = fopen('program.bin','rb')) == NULL){  printf('Error! opening file');  // Program exits if the file pointer returns NULL.  exit(1);  }  for(n = 1; n < 5; ++n){  fread(&num, sizeof(struct threeNum), 1, fptr);  printf('n1: %d	n2: %d	n3: %d', num.n1, num.n2, num.n3);  }  fclose(fptr);  return 0; } //Code submitted by Susobhan Akhuli>

Producción

n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>

Veamos las diferencias en forma de tabla:

mapa_desordenado c++
escaneo() fscanf()
1. Se utiliza para leer la entrada estándar.Esta función se utiliza para leer la entrada de un archivo.
2.

Su sintaxis es -:

scanf(const char *formato,…)

Su sintaxis es -:

fscanf(ARCHIVO *flujo, const char *formato,…)

3. Requiere especificadores de formato para recibir entradas de un tipo particular.Lee el flujo en forma de byte.
4.

Se necesitan tres parámetros que son:

Carácter de espacio en blanco, carácter que no es un espacio en blanco, especificadores de formato

Está definido en el archivo de encabezado #include