Sisäänrakennetut kirjastotoiminnot käyttäjän Input | sscanf, scanf_s, fscanf_s, sscanf_s

C-ohjelmointikieli tarjoaa erilaisia ​​sisäänrakennettuja kirjastotoimintoja käyttäjän syöttämistä varten. Tässä artikkelissa opimme sscanf scanf_s fscanf_s sscanf_s -kirjastofunktioista C:ssä.

1. sscanf()-funktio C:ssä

sscanf()-komentoa käytetään muotoiltujen syötteiden lukemiseen merkkijonosta. Sekä scanf()- että sscanf()-funktiot ovat samanlaisia, ainoa ero niiden välillä on, että scanf()-funktio lukee syötteen käyttäjältä tavallisesta syötteestä, kuten näppäimistöstä, ja sscanf()-funktio lukee syötteen merkkijonosta ja tallentaa syötteen toiseen merkkijonoon.

Syntaksi

int   sscanf   ( const char *   str   const char *   format   ...); 

Parametrit

    str : Syöttömerkkijono, josta haluamme lukea tietoja. muoto : Merkkijono, joka sisältää tyyppimääritykset. : Osoittaa, että funktio hyväksyy vaihtelevan määrän argumentteja.

Palautusarvo

  • Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
  • Jos syöttö epäonnistuu, ennen kuin mitään dataa voidaan lukea onnistuneesti, EOF palautetaan.

Huom : Näitä argumentteja tulee olla vähintään yhtä monta kuin muotomääritteiden tallentamia arvoja.

Esimerkki: C Ohjelma havainnollistaa sscanf-toimintoa

C
   // C program to illustrate sscanf statement   #include         int     main  ()   {      // declaring array s      char     s  []     =     '3 red balls 2 blue balls'  ;      char     str  [  10  ]     str2  [  10  ];      int     i  ;      // %*s is used to skip a word      sscanf  (  s       '%d %*s %*s %*s %s %s'       &  i       str       str2  );      printf  (  '%d %s %s   n  '       i       str       str2  );      return     0  ;   }   

Lähtö
3 blue balls  

2. scanf_s()-funktio C:ssä

Tämä toiminto on tarkoitettu Microsoftin kääntäjille. Se on sama kuin scanf, paitsi että se ei aiheuta puskurin ylikuormitusta. scanf_s()-funktio on turvallisempi kuin scanf()-funktio, koska se tarjoaa lisäparametrin puskurin koon määrittämiseksi, joka voi välttää puskurin ylivuodon.

Syntaksi

int   scanf_s  (const char *format [argument]...); 

Parametrit

    virta : Osoittimen tiedosto-objektiin, joka identifioi streamin. muoto : Se on merkkijono, joka sisältää tyyppimääritykset. … (ellipsi) : Osoittaa, että funktio hyväksyy vaihtelevan määrän argumentteja.

Huom : Tässä voimme määrittää puskurin koon ja itse asiassa ohjata syötteen rajaa, jotta koko sovellus ei kaadu muistin ylivuodon vuoksi.

Palautusarvo

  • Onnistuessaan funktio palauttaa luettujen arvojen määrän.
  • Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.

Miksi käyttää scanf_s()?

scanf vain lukee mitä tahansa konsolista tulevaa syötettä. C ei tarkista, mahtuuko käyttäjän syöte valitsemaasi muuttujaan. Jos sinulla on taulukko nimeltä color[3] ja käytät scanf-merkkijonolle Red, se toimii hyvin, mutta jos käyttäjä syöttää enemmän kuin 3 merkkiä, scanf alkaa kirjoittaa muistiin, joka ei kuulu väritaulukkoon.

C ei huomaa tätä tai varoita sinua, ja se saattaa kaataa ohjelman riippuen siitä, yrittääkö jokin päästä käsiksi ja kirjoittaa siihen muistipaikkaan, joka ei kuulu väriryhmään. Tässä scanf_s tulee peliin. scanf_s tarkistaa, että käyttäjän syöte mahtuu annettuun muistitilaan.

Huom : scanf_s() toimii vain Microsoft Visual Studiossa.

Esimerkki 1: C Ohjelma, joka havainnollistaa sscanf_s-funktiota

C
   // C program to illustrate sscanf_s statement   // scanf_s() will only work in Microsoft Visual Studio.   #include         #include         int     main  ()   {      char     a  [  5  ];      // sizeof(a) is buffer size      scanf_s  (  '%s'       a       sizeof  (  a  ));      printf  (  '  n  %s '       a  );      return     0  ;   }   


Red 

Lähtö 1

Red 

Syöte 2

Yellow 

Lähtö 2

No Output 

Esimerkki 2: C Ohjelma, joka havainnollistaa puskurin koon ja taulukon koon välistä suhdetta.

C++
   // C++ program   // consumes the Enter key   // (newline character) pressed after input   #include         int     main  ()   {      // example      char     ch  [  100000  ];      printf  (  'Enter characters: '  );      scanf_s  (  '%s'       ch       99999  );      getchar  ();      return     0  ;   }   
C
   // C program   // consumes the Enter key   // (newline character) pressed after input   #include         int     main  ()   {      char     ch  [  100000  ];      printf  (  'Enter characters: '  );      scanf_s  (  '%s'       ch       99999  );      getchar  ();      return     0  ;   }   
  • Jos puskurin koko on yhtä suuri tai pienempi kuin taulukon koko, puskurin kokoa suuremman tai yhtä suuren syöttäminen johtaa tietojen menetykseen, koska ylimääräinen data katkaistaan ​​ja puskurin kokoon - 1 asti ulottuvat tiedot luetaan.
  • Jos puskurin koko on suurempi kuin taulukon koko, niin
    • puskurin kokoa pienempi syöttäminen onnistuu, mutta antaa virheen
    • puskurin kokoa suuremman syöttäminen johtaa puskurin ylivuotoon ja antaa saman virheen.

3. fscanf_s() C:n funktio

Ero fscanf():n ja fscanf_s():n välillä on sama kuin scanf()- ja scanf_s():n välillä. fscanf_s() on suojattu funktio, joka vaatii jokaisen c C s S- ja [ ] -tyyppisen kentän koon välitettävän argumenttina välittömästi muuttujan jälkeen.

Syntaksi

int fscanf_s( FILE *stream const char *format [argument ]... ); 

Parametrit

    str : merkkijono, jota käytetään tietojen hakemiseen muoto : merkkijono, joka sisältää tyyppimääritykset … (ellipsi) : Osoittaa, että funktio hyväksyy vaihtelevan määrän argumentteja.

Huom : fscanf_s:ssä on ylimääräinen parametri puskurin koon määrittämiseksi ja tulon rajoituksen säätämiseksi.

Palautusarvo

  • Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
  • Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.

Huom : fscanf_s toimii vain MS Visual studiossa.

Esimerkki: C Ohjelma havainnollistaa fscanf_s-funktiota

C
   // C program to illustrate fscanf_s statement   // This program will run on MS Visual studio   #include         #include         int     main  ()   {      char     s1  [  10  ]     s2  [  10  ]     s3  [  10  ];      int     year  ;      // file pointer      FILE  *     fp  ;      // Open file securely      fopen_s  (  &  fp       'file.txt'       'w+'  );      fputs  (  'Hello World its 2017'       fp  );      rewind  (  fp  );      // Using fscanf_s      fscanf_s  (  fp       '%s'       s1       sizeof  (  s1  ));      fscanf_s  (  fp       '%s'       s2       sizeof  (  s2  ));      fscanf_s  (  fp       '%s'       s3       sizeof  (  s3  ));      fscanf_s  (  fp       '%d'       &  year       sizeof  (  year  ));      printf  (  'String1 |%s|  n  '       s1  );      printf  (  'String2 |%s|  n  '       s2  );      printf  (  'String3 |%s|  n  '       s3  );      printf  (  'Integer |%d|  n  '       year  );      fclose  (  fp  );      return     (  0  );   }   


Lähtö

String1 |Hello| String2 |World| String3 |its| Integer |2017| 

4. sscanf_s()-funktio C:ssä

sscanf_s() on sscanf():n suojattu funktio ja suojausfunktiot edellyttävät, että kunkin c C s S ja [ type -kentän koko välitetään argumenttina välittömästi muuttujan jälkeen.

Syntaksi

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...); 

Parametrit

    str : merkkijono, jota käytetään tietojen hakemiseen muoto : merkkijono, joka sisältää tyyppimääritykset … (ellipsi) : Osoittaa, että funktio hyväksyy vaihtelevan määrän argumentteja.

Huom : sscanf_s:ssä on ylimääräinen parametri puskurin koon määrittämiseksi ja tulon rajoituksen säätämiseksi.

Palautusarvo

  • Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
  • Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.

Huom : sscanf_s() toimii vain Microsoft Visual Studiossa.

Esimerkki: C Ohjelma, joka havainnollistaa sscanf_s-funktiota

C
   // C program to illustrate sscanf_s statement   // This program will run on MS Visual studio   #include         int     main  ()   {      char     s  []     =     '3 red balls 2 blue balls'  ;      char     str  [  10  ]     str2  [  10  ];      int     i  ;      // %*s is used to skip a word      sscanf_s  (  s       '%d'       &  i       sizeof  (  i  ));      sscanf_s  (  s       '%*d %*s %*s %*s %s'       str       sizeof  (  str  ));      sscanf_s  (  s       '%*d %*s %*s %*s %*s %s'       str2        sizeof  (  str2  ));      printf  (  '%d %s %s   n  '       i       str       str2  );      return     0  ;   }   


Lähtö

3 blue balls 

Luo tietokilpailu