logo

Ugrađene funkcije knjižnice za korisnički unos | sscanf, scanf_s, fscanf_s, sscanf_s

Programski jezik C nudi razne ugrađene bibliotečke funkcije za korisnički unos. U ovom ćemo članku naučiti o funkcijama knjižnice sscanf scanf_s fscanf_s sscanf_s u C-u.

1. sscanf() funkcija u C-u

sscanf() se koristi za čitanje formatiranog unosa iz niza. Obje funkcije scanf() i sscanf() su slične, jedina razlika između njih je u tome što funkcija scanf() čita unos korisnika sa standardnog unosa poput tipkovnice, a funkcija sscanf() čita unos iz niza i pohranjuje unos u drugi niz.

Sintaksa

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

Parametri

    str: Ulazni string iz kojeg želimo očitati podatke.format: Niz koji sadrži specifikator(e) tipa.… (elipsa): Označava da funkcija prihvaća promjenjivi broj argumenata.

Povratna vrijednost

  • Nakon uspjeha funkcija vraća broj uspješno pročitanih vrijednosti.
  • U slučaju neuspješnog unosa prije nego što se podaci mogu uspješno pročitati, vraća se EOF.

Bilješka : Trebalo bi biti najmanje onoliko ovih argumenata koliko je vrijednosti pohranjeno specifikatorima formata.



Primjer: C program za ilustraciju sscanf funkcije

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

Izlaz
3 blue balls 

2. scanf_s() funkcija u C-u

Ova je funkcija specifična za Microsoftove prevoditelje. Isti je kao scanf osim što ne uzrokuje preopterećenje međuspremnika. scanf_s() funkcija je sigurnija od scanf() funkcije jer pruža dodatni parametar za određivanje veličine međuspremnika koji može izbjeći prekoračenje međuspremnika.

csv datoteka čita java

Sintaksa

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

Parametri

    potok: Pokazivač na File objekt koji identificira stream.format: To je niz koji sadrži specifikator(e) tipa.… (elipsa): Označava da funkcija prihvaća promjenjivi broj argumenata.

Bilješka : Ovdje možemo odrediti veličinu međuspremnika i zapravo kontrolirati ograničenje unosa tako da se cijela aplikacija ne sruši zbog prelivanja memorije.

Povratna vrijednost

  • Nakon uspjeha funkcija vraća broj pročitanih vrijednosti.
  • U slučaju neuspješnog unosa prije nego što se podaci mogu uspješno pročitati, vraća se EOF.

Zašto koristiti scanf_s()?

scanf samo čita sve što je uneseno s konzole. C ne provjerava hoće li korisnički unos stati u varijablu koju ste odredili. Ako imate niz koji se zove color[3] i koristite scanf za niz Red, to će dobro funkcionirati, ali ako korisnik unese više od 3 znaka, scanf počinje pisati u memoriju koja ne pripada nizu boja.

C to neće uhvatiti niti vas upozoriti i može ili ne mora srušiti program ovisno o tome hoće li nešto pokušati pristupiti i pisati na tom memorijskom utoru koji ne pripada nizu boja. Ovdje scanf_s stupa na scenu. scanf_s provjerava hoće li korisnički unos stati u dani memorijski prostor.

Bilješka : scanf_s() će raditi samo u Microsoft Visual Studio.

Primjer 1: C program za ilustraciju funkcije sscanf_s

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


Unos 1

višeredni komentar powershell
Red

Izlaz 1

Red

Unos 2

Yellow

Izlaz 2

No Output

Primjer 2: C program za ilustraciju odnosa između veličine međuspremnika i veličine polja.

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; } 
  • Ako je veličina međuspremnika jednaka ili manja od veličine niza, tada će unos veći od ili jednak veličini međuspremnika dovesti do gubitka podataka jer će višak podataka biti skraćen, a podaci do veličine međuspremnika - 1 bit će pročitani.
  • Ako je veličina međuspremnika veća od veličine niza tada
    • unos manji od veličine međuspremnika će uspjeti, ali će dati pogrešku
    • unos veći od veličine međuspremnika dovest će do prekoračenja međuspremnika i dati istu pogrešku.

3. Funkcija fscanf_s() u C-u

Razlika između fscanf() i fscanf_s() ista je kao razlika između scanf() i scanf_s(). fscanf_s() je sigurna funkcija koja zahtijeva da veličina svakog polja tipa c C s S i [] bude proslijeđena kao argument neposredno nakon varijable.

Sintaksa

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

Parametri

    str: niz koji se koristi za dohvaćanje podatakaformat: niz koji sadrži specifikator(e) tipa… (elipsa): Označava da funkcija prihvaća promjenjivi broj argumenata.

Bilješka : fscanf_s ima dodatni parametar za određivanje veličine međuspremnika i zapravo kontrolu ograničenja unosa.

poravnavanje slike u css-u

Povratna vrijednost

  • Nakon uspjeha funkcija vraća broj uspješno pročitanih vrijednosti.
  • U slučaju neuspješnog unosa prije nego što se podaci mogu uspješno pročitati, vraća se EOF.

Bilješka : fscanf_s će raditi samo u MS Visual studiju.

Primjer: C program za ilustraciju funkcije fscanf_s

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


Izlaz

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

4. sscanf_s() funkcija u C-u

sscanf_s() je sigurna funkcija sscanf() i sigurne funkcije zahtijevaju da veličina svakog c C s S i [ tipa polja bude proslijeđena kao argument odmah nakon varijable.

java math pow

Sintaksa

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

Parametri

    str: niz koji se koristi za dohvaćanje podatakaformat: niz koji sadrži specifikator(e) tipa… (elipsa): Označava da funkcija prihvaća promjenjivi broj argumenata.

Bilješka : sscanf_s ima dodatni parametar za određivanje veličine međuspremnika i zapravo kontrolu ograničenja unosa.

Povratna vrijednost

  • Nakon uspjeha funkcija vraća broj uspješno pročitanih vrijednosti.
  • U slučaju neuspješnog unosa prije nego što se podaci mogu uspješno pročitati, vraća se EOF.

Bilješka : sscanf_s() će raditi samo u Microsoft Visual Studio.

Primjer: C program za ilustraciju funkcije sscanf_s

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


Izlaz

3 blue balls

Napravi kviz