logo

scanf() og fscanf() i C

På C-sprog, scanf() funktion bruges til at læse formateret input fra stdin. Det returnerer hele antallet af tegn skrevet i det ellers returnerer en negativ værdi.

Syntaks:



int scanf(const char *characters_set)>

Tidskompleksitet: På)

Hjælpeplads: O(n) hvor n er længden af ​​input.

Mange af os kender de traditionelle anvendelser af scanf. Nå, her er nogle af de mindre kendte fakta



numpy standardafvigelse

Hvordan læser man kun en del af det input, vi har brug for?
Overvej f.eks. en inputstrøm, der kun indeholder tegn efterfulgt af et heltal eller en float. Og vi skal kun scanne det heltal eller float.

Eksempel:

  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>


Antag nu, at vi ikke ved, hvad de foregående tegn er, men vi ved helt sikkert, at den sidste værdi er et heltal. Hvordan kan vi scanne den sidste værdi som et heltal?



Nedenstående løsning virker kun, hvis inputstrengen ikke har mellemrum. For eksempel,

Input

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

Produktion

Input Value read : 25>

Forklaring : %*s i scanf bruges til at ignorere noget input efter behov. I dette tilfælde ignorerer den inputtet indtil næste mellemrum eller ny linje. På samme måde, hvis du skriver %*d, vil det ignorere heltal indtil næste mellemrum eller linjeskift.

Generel brug af scanf( ):

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

Input

2>

Produktion

a = 2>

Ovenstående kendsgerning virker måske ikke som et brugbart trick ved første øjekast. For at forstå dets brug, lad os først se fscanf().

fscanf-funktion i C

Træt af al den klodsede syntaks at læse fra filer? godt, fscanf kommer til undsætning. Denne funktion bruges til at læse det formaterede input fra den givne stream på C-sproget.

Syntaks:

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

fscanf læser fra en fil, der peges af FILE-markøren (ptr), i stedet for at læse fra inputstrømmen.

Returværdi: Det returnerer nul eller EOF, hvis det ikke lykkes. Ellers returnerer det antallet af varer, der er blevet tildelt.

Tidskompleksitet: På)

Hjælpeplads: O(n) hvor n er længden af ​​input.

prioriteret kø

Eksempel 1: Overvej følgende tekstfil abc.txt

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

Nu vil vi kun læse byfeltet i ovenstående tekstfil og ignorere alle de andre felter. En kombination af fscanf og tricket nævnt ovenfor gør dette med lethed

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

Produktion

CITY hyderabad delhi bangalore>

Eksempel 2: Overvej følgende binære fil program.bin

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

For at læse alle værdier af n1, n2 & n3 i bin, bruger vi 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>

Produktion

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

Lad os se forskellene i en tabelform -:

scanf() fscanf()
1. Det bruges til at læse standard input.Denne funktion bruges til at læse input fra en fil
2.

Dens syntaks er -:

scanf(const char *format, …)

java få aktuel tid

Dens syntaks er -:

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

3. Det kræver formatspecifikationer at tage input af en bestemt type.Den læser strømmen i form af byte
4.

Det kræver tre parametre, der er -:

Whitespace-tegn, Ikke-whitespace-tegn, Formatspecifikationer

Det er defineret i header-filen #include