logo

scanf() ja fscanf() C:ssä

C-kielellä scanf() toimintoa käytetään formatoidun syötteen lukemiseen stdinistä. Se palauttaa siihen kirjoitettujen merkkien kokonaismäärän, muuten palauttaa negatiivisen arvon.

Syntaksi:



int scanf(const char *characters_set)>

Aika monimutkaisuus: Päällä)

Aputila: O(n) missä n on syötteen pituus.

Monet meistä tietävät skanfin perinteiset käyttötavat. No, tässä on joitain vähemmän tunnettuja tosiasioita



python lajittelusanakirja

Kuinka lukea vain osa tarvitsemastamme syötteestä?
Harkitse esimerkiksi jotakin syötevirtaa, joka sisältää vain merkkejä, joita seuraa kokonaisluku tai kelluva merkki. Ja meidän täytyy skannata vain tämä kokonaisluku tai kelluva.

Esimerkki:

  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>


Oletetaan nyt, että emme tiedä, mitä edelliset merkit ovat, mutta tiedämme varmasti, että viimeinen arvo on kokonaisluku. Kuinka voimme skannata viimeisen arvon kokonaislukuna?



Alla oleva ratkaisu toimii vain, jos syötemerkkijonossa ei ole välilyöntejä. Esimerkiksi,

Syöte

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

Lähtö

Input Value read : 25>

Selitys : Scanf:n %*s-arvoa käytetään ohittamaan joitakin syötteitä tarvittaessa. Tässä tapauksessa se jättää syötteen huomioimatta seuraavaan välilyöntiin tai rivinvaihtoon asti. Vastaavasti, jos kirjoitat %*d, se jättää huomioimatta kokonaisluvut seuraavaan välilyöntiin tai rivinvaihtoon asti.

Scanf( ) yleinen käyttö:

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

Syöte

2>

Lähtö

a = 2>

Yllä oleva tosiasia ei ehkä vaikuta ensi silmäyksellä hyödylliseltä temppulta. Ymmärtääksemme sen käytön, katsokaamme ensin fscanf().

fscanf-toiminto C:ssä

Oletko kyllästynyt kömpelöön tiedostoista luettavaan syntaksiin? no, fscanf tulee apuun. Tätä toimintoa käytetään lukemaan muotoiltu syöte annetusta virrasta C-kielellä.

Syntaksi:

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

fscanf lukee tiedostosta, joka osoittaa FILE-osoittimen (ptr), sen sijaan että lukee syöttövirrasta.

Palautusarvo: Se palauttaa nollan tai EOF:n, jos se ei onnistu. Muussa tapauksessa se palauttaa onnistuneesti määritettyjen kohteiden määrän.

Aika monimutkaisuus: Päällä)

Aputila: O(n) missä n on syötteen pituus.

Esimerkki 1: Harkitse seuraavaa tekstitiedostoa abc.txt

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

Nyt haluamme lukea vain yllä olevan tekstitiedoston kaupunkikentän jättäen huomioimatta kaikki muut kentät. Fscanfin ja yllä mainitun tempun yhdistelmä tekee tämän helposti

Freddie Mercury syntynyt
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; }>

Lähtö

CITY hyderabad delhi bangalore>

Esimerkki 2: Harkitse seuraavaa binaaritiedostoa program.bin

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

Kaikkien bin n1, n2 & n3 arvojen lukemiseksi käytämme 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>

Lähtö

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

Katsotaanpa erot taulukkomuodossa -:

scanf() fscanf()
1. Sitä käytetään standardisyötteen lukemiseen.Tätä toimintoa käytetään syötteen lukemiseen tiedostosta
2.

Sen syntaksi on -:

scanf(const char *muoto,…)

Sen syntaksi on -:

fscanf(TIEDOSTO *virta, const char *muoto,…)

3. Se edellyttää, että muotomäärittäjät ottavat tietyn tyyppisen syötteen.Se lukee virran tavujen muodossa
4.

Se vaatii kolme parametria, jotka ovat -:

Välilyöntimerkki , Ei välilyöntimerkki, Muotomääritykset

python //-operaattori
Se määritellään otsikkotiedostossa #include