logo

Integruotos bibliotekos funkcijos, skirtos vartotojo įvesties | sscanf, scanf_s, fscanf_s, sscanf_s

C programavimo kalba suteikia įvairias integruotas bibliotekos funkcijas, skirtas vartotojo įvestims. Šiame straipsnyje sužinosime apie sscanf scanf_s fscanf_s sscanf_s bibliotekos funkcijas C.

1. sscanf() funkcija C

sscanf() naudojamas nuskaityti suformatuotą įvestį iš eilutės. Abi funkcijos scanf () ir sscanf () yra panašios, vienintelis skirtumas tarp jų yra tas, kad funkcija scanf () nuskaito vartotojo įvestį iš standartinės įvesties, pavyzdžiui, klaviatūros, o funkcija sscanf () nuskaito įvestį iš eilutės ir išsaugo įvestį kitoje eilutėje.

Sintaksė

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

Parametrai

    g: įvesties eilutė, iš kurios norime nuskaityti duomenis.formatu: eilutė, kurioje yra tipo specifikacija (-ai).… (elipsis): Tai rodo, kad funkcija priima kintamą argumentų skaičių.

Grąžinimo vertė

  • Sėkmingai funkcija grąžina sėkmingai perskaitytų reikšmių skaičių.
  • Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis, grąžinamas EOF.

Pastaba : Šių argumentų turėtų būti bent tiek, kiek reikšmių, kurias saugo formato specifikatoriai.



Pavyzdys: C programa sscanf funkcijai iliustruoti

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

Išvestis
3 blue balls 

2. scanf_s() Funkcija C

Ši funkcija būdinga Microsoft kompiliatoriams. Tai tas pats, kas scanf, tik nesukelia buferio perkrovos. Funkcija scanf_s() yra saugesnė nei funkcija scanf(), nes ji suteikia papildomą parametrą buferio dydžiui nurodyti, kad būtų išvengta buferio perpildymo.

Sintaksė

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

Parametrai

    srautas: nukreipkite žymeklį į failo objektą, kuris identifikuoja srautą.formatu: Tai eilutė, kurioje yra tipo specifikacija (-ai).: Tai rodo, kad funkcija priima kintamą argumentų skaičių.

Pastaba : Čia galime nurodyti buferio dydį ir iš tikrųjų kontroliuoti įvesties limitą, kad visa programa nesustrigtų dėl atminties perpildymo.

Grąžinimo vertė

  • Sėkmingai funkcija grąžina nuskaitytų reikšmių skaičių.
  • Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.

Kodėl naudoti scanf_s()?

scanf tiesiog nuskaito bet kokią įvestį, pateiktą iš konsolės. C netikrina, ar vartotojo įvestis tilps į jūsų nurodytą kintamąjį. Jei turite masyvą, pavadintą color[3] ir eilutei Red naudojate scanf, jis veiks gerai, bet jei vartotojas įveda daugiau nei 3 simbolius, scanf pradeda rašyti į atmintį, kuri nepriklauso spalvų masyvai.

C to nepagaus arba jūsų neįspės, o programa gali sugesti arba ne, priklausomai nuo to, ar kas nors bandys pasiekti ir įrašyti į tą atminties lizdą, kuris nepriklauso spalvų masyvai. Čia pasirodo scanf_s. scanf_s patikrina, ar vartotojo įvestis tilps į nurodytą atminties vietą.

Pastaba : scanf_s() veiks tik Microsoft Visual Studio.

1 pavyzdys: C programa sscanf_s funkcijai iliustruoti

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


1 įvestis

Red

1 išėjimas

pervardyti katalogą Linux
Red

2 įvestis

Yellow

2 išėjimas

No Output

2 pavyzdys: C programa, skirta iliustruoti ryšį tarp buferio dydžio ir masyvo dydžio.

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; } 
  • Jei buferio dydis yra lygus arba mažesnis už masyvo dydį, tada įvedus didesnį arba lygų buferio dydį, bus prarasti duomenys, nes pertekliniai duomenys bus sutrumpinti, o duomenys iki buferio dydžio - 1 bus nuskaityti.
  • Jei buferio dydis yra didesnis nei masyvo dydis, tada
    • įvedus mažesnį nei buferio dydį pasiteisins, bet bus pateikta klaida
    • įvedus didesnį nei buferio dydį, buferis bus perpildytas ir bus pateikta tokia pati klaida.

3. fscanf_s() Funkcija C

Skirtumas tarp fscanf() ir fscanf_s() yra toks pat kaip ir scanf() ir scanf_s(). fscanf_s() yra saugi funkcija, kuriai reikia, kad kiekvieno c C s S ir [ ] tipo lauko dydis būtų perduodamas kaip argumentas iškart po kintamojo.

Sintaksė

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

Parametrai

    g: eilutė, naudojama duomenims gautiformatu: eilutė, kurioje yra tipo specifikacija (-ai)… (elipsis): Tai rodo, kad funkcija priima kintamą argumentų skaičių.

Pastaba : fscanf_s turi papildomą parametrą buferio dydžiui nurodyti ir iš tikrųjų valdyti įvesties ribą.

Grąžinimo vertė

  • Sėkmingai funkcija grąžina sėkmingai nuskaitytų reikšmių skaičių.
  • Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.

Pastaba : fscanf_s veiks tik MS Visual studijoje.

Pavyzdys: C programa, skirta iliustruoti fscanf_s funkciją

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


Išvestis

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

4. sscanf_s() Funkcija C

sscanf_s() yra saugi sscanf() funkcija, o saugioms funkcijoms reikia, kad kiekvieno c C s S ir [ tipo lauko dydis būtų perduodamas kaip argumentas iškart po kintamojo.

Sintaksė

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

Parametrai

    g: eilutė, naudojama duomenims gautiformatu: eilutė, kurioje yra tipo specifikacija (-ai)… (elipsis): Tai rodo, kad funkcija priima kintamą argumentų skaičių.

Pastaba : sscanf_s turi papildomą parametrą, skirtą nurodyti buferio dydį ir iš tikrųjų valdyti įvesties ribą.

Grąžinimo vertė

  • Sėkmingai funkcija grąžina sėkmingai nuskaitytų reikšmių skaičių.
  • Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.

Pastaba : sscanf_s() veiks tik Microsoft Visual Studio.

Pavyzdys: C programa, skirta sscanf_s funkcijai iliustruoti

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


Išvestis

3 blue balls

Sukurti viktoriną