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
- 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.
- 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.
- 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.
- 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.
- 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.
Povratna vrijednost
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.
Sintaksa
int scanf_s (const char *format [argument]...);
Parametri
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
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
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 ; }
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
Bilješka : fscanf_s ima dodatni parametar za određivanje veličine međuspremnika i zapravo kontrolu ograničenja unosa.
Povratna vrijednost
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.
Sintaksa
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametri
Bilješka : sscanf_s ima dodatni parametar za određivanje veličine međuspremnika i zapravo kontrolu ograničenja unosa.
Povratna vrijednost
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