logo

scanf() in fscanf() v C

V jeziku C, scanf() funkcija se uporablja za branje formatiranega vnosa iz stdin. Vrne celotno število znakov, zapisanih v nasprotnem primeru, vrne negativno vrednost.

Sintaksa:



int scanf(const char *characters_set)>

Časovna zapletenost: O(n)

Pomožni prostor: O(n), kjer je n dolžina vnosa.

Mnogi od nas poznamo tradicionalno uporabo scanf. No, tukaj je nekaj manj znanih dejstev



math.pow java

Kako prebrati le del vnosa, ki ga potrebujemo?
Na primer, razmislite o nekem vhodnem toku, ki vsebuje samo znake, ki jim sledi celo število ali plavajoče število. In skenirati moramo samo to celo število ali število s plavajočim.

primer:

  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>


Predpostavimo, da ne vemo, kaj so predhodni znaki, vendar zagotovo vemo, da je zadnja vrednost celo število. Kako lahko skeniramo zadnjo vrednost kot celo število?



Spodnja rešitev deluje samo, če vhodni niz nima presledkov. na primer

Vnos

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

Izhod

Input Value read : 25>

Pojasnilo : %*s v scanf se uporablja za ignoriranje nekaterih vnosov, kot je potrebno. V tem primeru ignorira vnos do naslednjega presledka ali nove vrstice. Podobno, če napišete %*d, bo prezrlo cela števila do naslednjega presledka ali nove vrstice.

Splošna uporaba scanf():

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

Vnos

2>

Izhod

a = 2>

Zgornje dejstvo se morda na prvi pogled ne zdi uporaben trik. Da bi razumeli njegovo uporabo, si najprej poglejmo fscanf().

Funkcija fscanf v C

Ste naveličani vse okorne sintakse za branje iz datotek? no, fscanf priskoči na pomoč. Ta funkcija se uporablja za branje oblikovanega vnosa iz podanega toka v jeziku C.

Sintaksa:

pretvorba niza v celo število
int fscanf(FILE *ptr, const char *format, ...)>

fscanf bere iz datoteke, na katero kaže kazalec FILE (ptr), namesto da bere iz vhodnega toka.

Povratna vrednost: Če je neuspešno, vrne nič ali EOF. V nasprotnem primeru vrne število uspešno dodeljenih elementov.

Časovna zapletenost: O(n)

Pomožni prostor: O(n), kjer je n dolžina vnosa.

Primer 1: Razmislite o naslednji besedilni datoteki abc.txt

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

Zdaj želimo prebrati samo polje mesta zgornje besedilne datoteke in zanemariti vsa druga polja. Kombinacija fscanf in zgoraj omenjenega trika to naredi z lahkoto

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

Izhod

CITY hyderabad delhi bangalore>

Primer 2: Razmislite o naslednji binarni datoteki program.bin

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

Za branje vseh vrednosti n1, n2 in n3 zabojnika uporabljamo 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>

Izhod

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

Oglejmo si razlike v obliki tabele -:

scanf() fscanf()
1. Uporablja se za branje standardnega vnosa.Ta funkcija se uporablja za branje vnosa iz datoteke
2.

Njegova sintaksa je -:

scanf(const char *format, …)

Njegova sintaksa je -:

fscanf(DATOTEKA *tok, const char *format, …)

3. Zahteva, da določitelji formata sprejmejo vnos določene vrste.Prebere tok v obliki bajta
4.

Potrebuje tri parametre, ki so:

Presledek, znak, ki ni presledek, specifikatorji formata

tretja normalna oblika
Definiran je v datoteki glave #include