logo

scanf() un fscanf() valodā C

C valodā, scanf() funkcija tiek izmantota, lai nolasītu formatētu ievadi no stdin. Tas atgriež visu tajā ierakstīto rakstzīmju skaitu, pretējā gadījumā atgriež negatīvu vērtību.

Sintakse:



int scanf(const char *characters_set)>

Laika sarežģītība: O(n)

Palīgtelpa: O(n) kur n ir ievades garums.

Daudzi no mums zina tradicionālos scanf lietojumus. Nu, lūk, daži no mazāk zināmiem faktiem



java izņēmumi

Kā izlasīt tikai daļu no mums nepieciešamās ievades?
Piemēram, apsveriet ievades straumi, kurā ir tikai rakstzīmes, kam seko vesels skaitlis vai pludiņš. Un mums ir jāskenē tikai šis veselais skaitlis vai peldošais skaitlis.

Piemērs:

  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>


Tagad pieņemsim, ka mēs nezinām, kas ir iepriekšējās rakstzīmes, bet mēs noteikti zinām, ka pēdējā vērtība ir vesels skaitlis. Kā mēs varam skenēt pēdējo vērtību kā veselu skaitli?



Tālāk norādītais risinājums darbojas tikai tad, ja ievades virknē nav atstarpes. Piemēram,

Ievade

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

Izvade

Input Value read : 25>

Paskaidrojums : %*s failā scanf tiek izmantots, lai pēc vajadzības ignorētu kādu ievadi. Šajā gadījumā tas ignorē ievadi līdz nākamajai atstarpei vai jaunajai rindai. Tāpat, ja rakstīsit %*d, veseli skaitļi tiks ignorēti līdz nākamajai atstarpei vai jaunajai rindai.

Scanf( ) vispārīga izmantošana:

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

Ievade

2>

Izvade

a = 2>

Iepriekš minētais fakts no pirmā acu uzmetiena var nešķist noderīgs triks. Lai saprastu tā lietojumu, vispirms apskatīsim fscanf().

fscanf funkcija C

Vai esat noguris no neveiklās sintakses, ko lasīt no failiem? nu fscanf nāk palīgā. Šī funkcija tiek izmantota, lai nolasītu formatēto ievadi no dotās straumes C valodā.

Sintakse:

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

fscanf lasa no faila, uz kuru norāda FILE rādītājs (ptr), nevis lasa no ievades straumes.

Atgriešanas vērtība: Tas atgriež nulli vai EOF, ja tas nav veiksmīgs. Pretējā gadījumā tas atgriež veiksmīgi piešķirto vienumu skaitu.

Laika sarežģītība: O(n)

Palīgtelpa: O(n) kur n ir ievades garums.

1. piemērs: Apsveriet šādu teksta failu abc.txt

instantiācija java
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>

Tagad mēs vēlamies lasīt tikai iepriekš minētā teksta faila pilsētas lauku, ignorējot visus pārējos laukus. Fscanf un iepriekš minētā trika kombinācija to dara viegli

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

Izvade

CITY hyderabad delhi bangalore>

2. piemērs: Apsveriet šādu bināro failu program.bin

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

Lai nolasītu visas tvertnes n1, n2 un n3 vērtības, mēs izmantojam 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>

Izvade

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

Apskatīsim atšķirības tabulas veidā -:

scanf() fscanf()
1. To izmanto standarta ievades lasīšanai.Šo funkciju izmanto, lai nolasītu ievadi no faila
2.

Tās sintakse ir -:

scanf (const char *formāts, …)

Tās sintakse ir -:

fscanf (FILE *straume, const char *formāts, …)

romiešu ciparu diagramma 1100
3. Tas prasa, lai formāta norādītāji pieņemtu noteikta veida ievadi.Tas nolasa straumi baitu formā
4.

Tam nepieciešami trīs parametri, kas ir -:

Atstarpes rakstzīme, bez atstarpes rakstzīme, formāta specifikācijas

Tas ir definēts galvenes failā #include