logo

Уграђене функције библиотеке за кориснички унос | ссцанф, сцанф_с, фсцанф_с, ссцанф_с

Програмски језик Ц пружа различите функције уграђене библиотеке за кориснички унос. У овом чланку ћемо научити о функцијама библиотеке ссцанф сцанф_с фсцанф_с ссцанф_с у Ц.

1. функција ссцанф() у Ц

ссцанф() се користи за читање форматираног уноса из стринга. Функције сцанф() и ссцанф() су сличне, једина разлика између њих је у томе што функција сцанф() чита унос од корисника са стандардног уноса као што је тастатура, а функција ссцанф() чита унос из стринга и чува унос у другом стрингу.

Синтакса

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

Параметерс

    стр: Улазни низ из којег желимо да читамо податке.формату: Стринг који садржи спецификације типа.… (троточка): Означава да функција прихвата променљив број аргумената.

Повратна вредност

  • По успеху функција враћа број успешно прочитаних вредности.
  • У случају грешке у уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.

Напомена : Требало би да има најмање онолико ових аргумената колико је број вредности сачуваних у спецификацијама формата.



Пример: Ц програм за илустрацију функције ссцанф

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

Излаз
3 blue balls 

2. функција сцанф_с() у Ц

Ова функција је специфична за Мицрософт компајлере. То је исто што и сцанф осим што не узрокује преоптерећење бафера. Функција сцанф_с() је сигурнија од функције сцанф() јер обезбеђује додатни параметар за одређивање величине бафера који може да избегне преливање бафера.

фонтови за гимп

Синтакса

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

Параметерс

    поток: Показивач на објекат Филе који идентификује стрим.формату: То је стринг који садржи специфицатор(е) типа.… (троточка): Означава да функција прихвата променљив број аргумената.

Напомена : Овде можемо одредити величину бафера и заправо контролисати ограничење уноса како се цела апликација не би срушила због преливања меморије.

Повратна вредност

  • По успеху функција враћа број прочитаних вредности.
  • У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.

Зашто користити сцанф_с()?

сцанф само чита било који унос који је обезбеђен са конзоле. Ц не проверава да ли ће се кориснички унос уклопити у променљиву коју сте одредили. Ако имате низ који се зове цолор[3] и користите сцанф за стринг Ред, то ће радити добро, али ако корисник унесе више од 3 карактера, сцанф почиње да уписује у меморију која не припада низу боја.

Ц неће ово ухватити или вас упозорити и може или не мора да сруши програм у зависности од тога да ли нешто покуша да приступи и упише на том меморијском слоту који не припада низу боја. Овде сцанф_с улази у игру. сцанф_с проверава да ли ће кориснички унос стати у дати меморијски простор.

Напомена : сцанф_с() ће радити само у Мицрософт Висуал Студио-у.

Пример 1: Ц програм за илустрацију функције ссцанф_с

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

како дереференцирати показивач у ц
Red

Излаз 1

Red

Улаз 2

Yellow

Излаз 2

No Output

Пример 2: Ц Програм за илустровање односа између величине бафера и величине низа.

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; } 
  • Ако је величина бафера једнака или мања од величине низа, онда ће уношење веће или једнако величини бафера довести до губитка података јер ће вишак података бити скраћен и подаци до величине бафера - 1 ће бити прочитани.
  • Ако је величина бафера већа од величине низа онда
    • уношење мање од величине бафера ће радити, али ће дати грешку
    • унос веће од величине бафера ће довести до преливања бафера и дати исту грешку.

3. фсцанф_с() функција у Ц

Разлика између фсцанф() и фсцанф_с() је иста као код сцанф() и сцанф_с(). фсцанф_с() је безбедна функција која захтева да се величина сваког поља типа ц Ц с С и [ ] прослеђује као аргумент непосредно иза променљиве.

Синтакса

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

Параметерс

    стр: стринг који се користи за преузимање податакаформату: стринг који садржи специфицатор(е) типа… (троточка): Означава да функција прихвата променљив број аргумената.

Напомена : фсцанф_с има додатни параметар да одреди величину бафера и заправо контролише ограничење уноса.

стринг ти инт

Повратна вредност

  • По успеху функција враћа број успешно прочитаних вредности.
  • У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.

Напомена : фсцанф_с ће радити само у МС Висуал студију.

Пример: Ц програм за илустрацију функције фсцанф_с

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


Излаз

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

4. функција ссцанф_с() у Ц

ссцанф_с() је безбедна функција ссцанф() и безбедне функције захтевају да се величина сваког поља ц Ц с С и [ типе прослеђује као аргумент непосредно иза променљиве.

делимична зависност

Синтакса

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

Параметерс

    стр: стринг који се користи за преузимање податакаформату: стринг који садржи специфицатор(е) типа… (троточка): Означава да функција прихвата променљив број аргумената.

Напомена : ссцанф_с има додатни параметар да одреди величину бафера и заправо контролише ограничење уноса.

Повратна вредност

  • По успеху функција враћа број успешно прочитаних вредности.
  • У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.

Напомена : ссцанф_с() ће радити само у Мицрософт Висуал Студио-у.

Пример: Ц програм за илустрацију функције ссцанф_с

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


Излаз

3 blue balls

Креирај квиз