logo

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.

mikä on näyttöni koko

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


apache
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 hakemiseenmuoto: 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.

muistin vaihto

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.

muuntaa merkkijonon merkiksi

Syntaksi

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

Parametrit

    str: merkkijono, jota käytetään tietojen hakemiseenmuoto: 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