logo

scanf() a fscanf() v C

V jazyce C, scanf() funkce se používá ke čtení formátovaného vstupu ze stdin. Vrátí celý počet znaků zapsaných v něm jinak, vrátí zápornou hodnotu.

Syntax:



int scanf(const char *characters_set)>

Časová náročnost: Na)

Pomocný prostor: O(n) kde n je délka vstupu.

Mnoho z nás zná tradiční použití scanf. No, tady jsou některé z méně známých faktů



spojový seznam

Jak číst pouze část vstupu, který potřebujeme?
Vezměme si například nějaký vstupní proud, který obsahuje pouze znaky následované celým číslem nebo plovoucí čárkou. A my potřebujeme skenovat pouze toto celé číslo nebo plovoucí číslo.

Příklad:

  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>


Nyní předpokládejme, že nevíme, co jsou předchozí znaky, ale určitě víme, že poslední hodnota je celé číslo. Jak můžeme naskenovat poslední hodnotu jako celé číslo?



Níže uvedené řešení funguje pouze v případě, že vstupní řetězec neobsahuje mezery. Například,

Vstup

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

Výstup

Input Value read : 25>

Vysvětlení : %*s v scanf se používá k ignorování některých vstupů podle potřeby. V tomto případě ignoruje vstup až do další mezery nebo nového řádku. Podobně, pokud napíšete %*d, bude ignorovat celá čísla až do další mezery nebo nového řádku.

Obecné použití scanf():

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

Vstup

2>

Výstup

a = 2>

Výše uvedený fakt se na první pohled nemusí zdát jako užitečný trik. Abychom porozuměli jeho použití, podívejme se nejprve na fscanf().

Funkce fscanf v C

Už vás nebaví všechna ta nemotorná syntaxe ke čtení ze souborů? fscanf přichází na pomoc. Tato funkce slouží ke čtení formátovaného vstupu z daného streamu v jazyce C.

Syntax:

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

fscanf čte ze souboru, na který ukazuje ukazatel FILE (ptr), namísto čtení ze vstupního proudu.

parciální derivát v latexu

Návratová hodnota: Vrátí nulu nebo EOF, pokud není úspěšný. V opačném případě vrátí počet úspěšně přiřazených položek.

Časová náročnost: Na)

Pomocný prostor: O(n) kde n je délka vstupu.

Příklad 1: Zvažte následující textový soubor abc.txt

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

Nyní chceme číst pouze pole města výše uvedeného textového souboru a ignorovat všechna ostatní pole. Kombinace fscanf a výše uvedeného triku to dělá snadno

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

Výstup

c pole řetězců programu
CITY hyderabad delhi bangalore>

Příklad 2: Zvažte následující binární soubor program.bin

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

Ke čtení všech hodnot n1, n2 a n3 přihrádky používáme 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>

Výstup

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

Podívejme se na rozdíly v tabulkové formě -:

scanf() fscanf()
1. Používá se ke čtení standardního vstupu.Tato funkce se používá ke čtení vstupu ze souboru
2.

Jeho syntaxe je -:

scanf(const char *formát, …)

Jeho syntaxe je -:

fscanf(FILE *stream, const char *formát, …)

3. Vyžaduje, aby specifikátory formátu převzaly vstup určitého typu.Přečte proud ve formě bajtu
4.

Vyžaduje tři parametry, které jsou:

Znak mezery , Znak bez mezer, Specifikátory formátu

Je definován v záhlaví souboru #include