logo

scanf() og fscanf() i C

På C-språk, scanf() funksjonen brukes til å lese formatert input fra stdin. Den returnerer hele antallet tegn skrevet i den ellers, returnerer en negativ verdi.

Syntaks:



int scanf(const char *characters_set)>

Tidskompleksitet: På)

Hjelpeplass: O(n) hvor n er lengden på input.

Mange av oss kjenner den tradisjonelle bruken av scanf. Vel, her er noen av de mindre kjente faktaene



numpy standardavvik

Hvordan lese bare en del av innspillet vi trenger?
Tenk for eksempel på en inndatastrøm som bare inneholder tegn etterfulgt av et heltall eller en flyte. Og vi trenger å skanne bare det hele tallet 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>


Nå, anta at vi ikke vet hva de foregående tegnene er, men vi vet sikkert at den siste verdien er et heltall. Hvordan kan vi skanne den siste verdien som et heltall?



Løsningen nedenfor fungerer bare hvis inndatastrengen ikke har mellomrom. For eksempel,

Inndata

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

Produksjon

Input Value read : 25>

Forklaring : %*s i scanf brukes til å ignorere noen inndata etter behov. I dette tilfellet ignorerer den inndata til neste mellomrom eller ny linje. På samme måte, hvis du skriver %*d vil det ignorere heltall til neste mellomrom eller ny linje.

Generell bruk av scanf( ):

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

Inndata

2>

Produksjon

a = 2>

Faktumet ovenfor virker kanskje ikke som et nyttig triks ved første øyekast. For å forstå bruken, la oss først se fscanf().

fscanf-funksjon i C

Lei av all den klønete syntaksen å lese fra filer? vel, fscanf kommer til unnsetning. Denne funksjonen brukes til å lese den formaterte inngangen fra den gitte strømmen på C-språket.

Syntaks:

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

fscanf leser fra en fil pekt av FILE-pekeren (ptr), i stedet for å lese fra inndatastrømmen.

Returverdi: Den returnerer null eller EOF, hvis den ikke lykkes. Ellers returnerer den antallet varer som er tildelt.

Tidskompleksitet: På)

Hjelpeplass: O(n) hvor n er lengden på inngangen.

prioritert kø

Eksempel 1: Tenk på følgende tekstfil abc.txt

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

Nå vil vi bare lese byfeltet til tekstfilen ovenfor, og ignorere alle de andre feltene. En kombinasjon av fscanf og trikset nevnt ovenfor gjør dette med letthet

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

Produksjon

CITY hyderabad delhi bangalore>

Eksempel 2: Tenk på følgende binære fil program.bin

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

For å lese alle verdiene til n1, n2 og n3 i bin, bruker 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>

Produksjon

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

La oss se forskjellene i en tabellform -:

scanf() fscanf()
1. Den brukes til å lese standardinndata.Denne funksjonen brukes til å lese inndata fra en fil
2.

Syntaksen er -:

scanf(const char *format, …)

java konvertere char til streng

Syntaksen er -:

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

3. Det krever formatspesifikasjoner for å ta innspill av en bestemt type.Den leser strømmen i form av byte
4.

Det krever tre parametere som er -:

Mellomromstegn, Ikke-mellomrom, Formatspesifikasjoner

Det er definert i overskriftsfilen #include