logo

scanf() i fscanf() a C

En llenguatge C, scanf() La funció s'utilitza per llegir l'entrada formatada des de stdin. Retorna el nombre sencer de caràcters escrits en ell, en cas contrari, retorna un valor negatiu.

Sintaxi:



int scanf(const char *characters_set)>

Complexitat temporal: O(n)

Espai auxiliar: O(n) on n és la longitud de l'entrada.

Molts de nosaltres coneixem els usos tradicionals de scanf. Bé, aquí teniu alguns dels fets menys coneguts



topologies de xarxa

Com llegir només una part de l'entrada que necessitem?
Per exemple, considereu un flux d'entrada que només conté caràcters seguits d'un nombre enter o d'un nombre flotant. I només hem d'escanejar aquest nombre sencer o flotant.

Exemple:

  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>


Ara, suposem que no sabem quins són els caràcters anteriors, però segur que sabem que l'últim valor és un nombre enter. Com podem escanejar l'últim valor com a nombre enter?



La solució següent només funciona si la cadena d'entrada no té espais. Per exemple,

Entrada

'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; }>

Sortida

Input Value read : 25>

Explicació : El %*s a scanf s'utilitza per ignorar alguna entrada segons sigui necessari. En aquest cas, ignora l'entrada fins al següent espai o nova línia. De la mateixa manera, si escriviu %*d, ignorarà els nombres enters fins al següent espai o nova línia.

Ús 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; }>

Entrada

2>

Sortida

a = 2>

El fet anterior pot no semblar un truc útil a primera vista. Per entendre el seu ús, primer vegem fscanf().

jocs de missatges a Android

Funció fscanf en C

Cansat de tota la sintaxi maldestra per llegir dels fitxers? bé, fscanf ve al rescat. Aquesta funció s'utilitza per llegir l'entrada formatada del flux donat en llenguatge C.

Sintaxi:

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

fscanf llegeix des d'un fitxer apuntat pel punter FILE (ptr), en lloc de llegir des del flux d'entrada.

Valor de retorn: Retorna zero o EOF, si no té èxit. En cas contrari, retorna el nombre d'elements assignats correctament.

Complexitat temporal: O(n)

Espai auxiliar: O(n) on n és la longitud de l'entrada.

Exemple 1: Considereu el següent fitxer de text abc.txt

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

Ara, volem llegir només el camp de la ciutat del fitxer de text anterior, ignorant tots els altres camps. Una combinació de fscanf i el truc esmentat anteriorment ho fa amb facilitat

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; }>

Sortida

CITY hyderabad delhi bangalore>

Exemple 2: Considereu el següent fitxer binari program.bin

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

Per llegir tots els valors de n1, n2 i n3 de la safata, estem utilitzant 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>

Sortida

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

Vegem les diferències en forma tabular -:

scanf() fscanf()
1. S'utilitza per llegir l'entrada estàndard.Aquesta funció s'utilitza per llegir l'entrada d'un fitxer
2.

La seva sintaxi és -:

scanf(const char *format, …)

edat de vicky kaushal

La seva sintaxi és -:

fscanf(FILE *stream, const char *format, …)

3. Requereix que els especificadors de format acceptin l'entrada d'un tipus determinat.Llegeix el flux en forma de byte
4.

Pren tres paràmetres que són -:

Caràcter espai en blanc, caràcter que no és espai en blanc, especificadors de format

Es defineix al fitxer de capçalera #include