logo

scanf () ir fscanf () C

C kalba, scanf() funkcija naudojama nuskaityti suformatuotą įvestį iš stdin. Jis grąžina visą jame įrašytų simbolių skaičių kitaip, grąžina neigiamą reikšmę.

Sintaksė:



int scanf(const char *characters_set)>

Laiko sudėtingumas: O(n)

Pagalbinė erdvė: O(n) čia n yra įvesties ilgis.

Daugelis iš mūsų žino tradicinius „scanf“ naudojimo būdus. Na, čia yra keletas mažiau žinomų faktų



Java kodo pavyzdžiai

Kaip perskaityti tik dalį mums reikalingos informacijos?
Pavyzdžiui, apsvarstykite įvesties srautą, kuriame yra tik simboliai, po kurių seka sveikasis skaičius arba slankioji rodyklė. Ir mums reikia nuskaityti tik tą sveikąjį skaičių arba plaukioti.

Pavyzdys:

  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>


Tarkime, kad nežinome, kokie yra ankstesni simboliai, bet tikrai žinome, kad paskutinė reikšmė yra sveikasis skaičius. Kaip galime nuskaityti paskutinę reikšmę kaip sveikąjį skaičių?



Toliau pateiktas sprendimas veikia tik tuo atveju, jei įvesties eilutėje nėra tarpų. Pavyzdžiui,

Įvestis

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

Išvestis

Input Value read : 25>

Paaiškinimas : %*s, esantis scanf, naudojamas ignoruoti tam tikrą įvestį, jei reikia. Tokiu atveju jis ignoruoja įvestį iki kitos tarpo arba naujos eilutės. Panašiai, jei rašysite %*d, sveikieji skaičiai bus ignoruojami iki kitos tarpo arba naujos eilutės.

Bendras scanf( ) naudojimas:

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

Įvestis

2>

Išvestis

a = 2>

Aukščiau pateiktas faktas iš pirmo žvilgsnio gali neatrodyti kaip naudingas triukas. Norėdami suprasti jo naudojimą, pirmiausia pažiūrėkime fscanf().

iphone jaustukai android telefone

fscanf funkcija C

Pavargote nuo visos gremėzdiškos sintaksės, kurią reikia skaityti iš failų? na, fscanf ateina į pagalbą. Ši funkcija naudojama nuskaityti suformatuotą įvestį iš nurodyto srauto C kalba.

Sintaksė:

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

fscanf nuskaito iš failo, nurodyto FILE žymekliu (ptr), o ne iš įvesties srauto.

Grąžinimo vertė: Jei nepavyksta, jis grąžina nulį arba EOF. Kitu atveju jis grąžina sėkmingai priskirtų elementų skaičių.

Laiko sudėtingumas: O(n)

Pagalbinė erdvė: O(n) čia n yra įvesties ilgis.

1 pavyzdys: Apsvarstykite šį tekstinį failą abc.txt

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

Dabar norime perskaityti tik aukščiau esančio tekstinio failo miesto lauką, nepaisydami visų kitų laukų. Fscanf ir aukščiau paminėto triuko derinys tai daro lengvai

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

Išvestis

CITY hyderabad delhi bangalore>

2 pavyzdys: Apsvarstykite šį dvejetainį failą program.bin

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

Norėdami nuskaityti visas dėžės n1, n2 ir n3 reikšmes, naudojame 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>

Išvestis

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

Pažiūrėkime skirtumus lentelės pavidalu -:

scanf() fscanf()
1. Jis naudojamas nuskaityti standartinę įvestį.Ši funkcija naudojama nuskaityti įvestį iš failo
2.

Jo sintaksė yra:

scanf (const char *formatas, ...)

obj java

Jo sintaksė yra:

fscanf (FILE * srautas, const char * formatas, ...)

3. Tam reikia, kad formato specifikatoriai priimtų konkretaus tipo įvestį.Jis skaito srautą baitų pavidalu
4.

Tam reikia trijų parametrų, kurie yra:

Tarpo simbolis , Ne tarpo simbolis, Formato specifikacijos

Jis apibrėžtas antraštės faile #include