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

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

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 

Креирај квиз