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
- Sėkmingai funkcija grąžina sėkmingai perskaitytų reikšmių skaičių.
- Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis, grąžinamas EOF.
- Sėkmingai funkcija grąžina nuskaitytų reikšmių skaičių.
- Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.
- 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.
- Sėkmingai funkcija grąžina sėkmingai nuskaitytų reikšmių skaičių.
- Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.
- Sėkmingai funkcija grąžina sėkmingai nuskaitytų reikšmių skaičių.
- Įvesties gedimo atveju prieš sėkmingai nuskaitant duomenis EOF grąžinamas.
Grąžinimo vertė
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
Pastaba : Čia galime nurodyti buferio dydį ir iš tikrųjų kontroliuoti įvesties limitą, kad visa programa nesustrigtų dėl atminties perpildymo.
Grąžinimo vertė
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; }
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
Pastaba : fscanf_s turi papildomą parametrą buferio dydžiui nurodyti ir iš tikrųjų valdyti įvesties ribą.
Grąžinimo vertė
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
Pastaba : sscanf_s turi papildomą parametrą, skirtą nurodyti buferio dydį ir iš tikrųjų valdyti įvesties ribą.
Grąžinimo vertė
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ą