-->
Главная » Статьи » Информатика

ЕНГІЗУ-ШЫҒАРУ ИНТЕРФЕЙСІ

ЕНГІЗУ-ШЫҒАРУ ИНТЕРФЕЙСІ

 

Енгізу-шығару мүмкіндіктері Си тілінің негізгі бөлігі емес. Нақтылы программалар біз сөз қылғандарға қарағанда, өзін қоршағандармен өте күрделі тәсілдермен өзара әрекеттеседі.

Библиотекалық енгізу-шығару функциясы ANSI стандартымен дәл анықталады, сондықтан Си-де қолдау болатын кез-келген қондырғымен байланысты. Осы функциялар енгізу-шығару мәтінінің қарапайым моделін іске асырады. Мәтіндік ағын жолдар тізбегінен тұрады; әр жол жаңа литер жолымен аяқталады.

Енгізудің қарапайым механизмі – ағынның келесі литерін қайтаратын немесе егер файлдың  EOF  соңы табылса getchar функциясының бір литерін оқу:

int getchar ( void)

әдетте EOF = -1 мәніне тең.

int putchar (int) функциясы шығару үшін қолданылады: putchar (c) с литерін стандартты шығаруға (экран) жібереміз. putchar фукнкциясы нәтиже ретінде жіберілген литерді немесе қате болған жағдайда EOF-ты қайтарады.

Printf функциясымен орындалатын шығару, сондай-ақ стандартты шығу ағынына жіберіледі putchar және  printf-ды қалауымыз бойынша кезектесіп шығаруға болады, бұдан шығару осы функциялар шақыратын жүйелілікпен қалыптасады.

Мысал ретінде енгізуді төменгі регистрге ауыстыратын lower программасын қарастырайық:

   #include<stdio.h>

#include<ctype.h>

   main( )

{  int c;

   while (( c= getchar( )) ! = EOF)

             putchar(tolower(c));

   return 0;

}

tolower функциясы <ctype.h>-та анықталады. Ол жоғарғы регистірдің әріптерін төменгі регистр әріптеріне ауыстырады, ал қалған литерлерді өзгеріссіз қайтарады.

 

printf функциясы ішкі мәндерді мәтінге ауыстырады.

int printf ( char*format, arg1, arg2,…)

printf функциясы форматты басқару арқылы (форматты стринг) стандартты шығаруда өзінің аргументтерін түрлендіреді, форматтайды және басып шығарады. Ол басып шығарылған литерлердің санын қайтарады.

Форматты стринг объектілерінің кәдімгі литерлерден шығу ағынына тура көшірілетін кәдімгі литерлерден және әр қайсысы түрлендірілетін және printf-тің кезекті аргументін басып шығаратын түрлендіру спецификациясынан тұрады. Түрлендіру кез-келген спецификациясы % белгісімен басталып, спецификатор литерімен аяқталады. % мен спецификатор литерінің арасында минус таңбасы, нүкте, әріп элементтері орналасуы мүмкін. Еген %-ден кейін спецификатор литері орналаспаса, printf функциясының бағыты анықталмайды.

sprintf функциясы printf-тегі түрлендіруді орындайды, бірақ шығару int sprintf ( char*string, char*format, arg1,arg2,…) стрингте есте сақталады.

Ұзындық айнымалысы аргументтерінің тізімдерімен және де олар жұмыс істейтін функцияны қалай жазуға болатынын көрсетейік. Бұл үшін minprintf деп аталатын printf функциясының қысқартылған версиясын құрайық. Бұл функция форматы берілген стрингпен және аргументтермен жұмыс істейді, формат түрлендіру жайында қозғасақ, олар стандартты printf көмегімен іске асырылады.

printf стандартты функциясының декларациясы төмендегідей болады.

   int printf (char*fmt,…),

 

мұндағы көп нүкте аргументтердің типтері мен сандары өзгеретіндігін білдіреді. Біздің minpritnf функциямыз былайша сипатталады

                      void minprintf ( char * fmt,…)

және ол литер санын бермейді.

Барлық қиындық minprintf – аргумент тізімінің бойымен қалай жылжитындығында, өйткені осы тізімнің атауы да жоқ. Стандартты бос <stdarg.h> файл аргументтер тізімі бойынша қалай жүру керектігін анықтайтын макроанықтамалар (va_start, va_arg, va_end) жиынынан тұрады.

Тізілген құралдар printf қысқартылған версияның негізін құрайды.

#include <stdarg.h>

// minprintf: printf версиясы аргументтердің айнымалы санымен

void minprintf ( char * fmt,…)

{  va_list ap;                  //көрсеткіш типі - va_list кезекті атаусыз аргументіне көрсеткіш

   char *p, *sval;

int ival;

double dval;

va_start(ap,fmt);          // макрос аргументы бірінші  атаусыз аргументпен инициализациалайды

for(p=fmt; *p; p+ +)

      {    if (*p!=’%’)

             {  putchar (*p);

                 continue;

             }

   switch (*+ +p)

                {   case ‘d’ivalva_argap,int); // макрос кезекті аргументті береді,

                                                          // ал ар келесіге жылжытады

                     printf ( " %d”, ival);

                        break;

                     case‘f:

                     dval=va_arg(ap,double);
                                 printf("%f”,dval);
                                 break;

                              case‘s’:
                                  for sval=va_argap,char*); 
*svalsval+ +)

                      putchar( * sval) ;

                      break;

                      defaultputchar (*p);

                      break;

             }

        }
      va_end(ap); 
                                     // барлығы жазылғанда тазалау

}

Форматты енгізу (scanf)

 

Енгізу функциясының декларациясы келесі түрде болады:

int scanf ( char * format, …);

scanf функциясы литерлерді стандартты кіру ағынынан оқиды, оларды format стринг спецификациясымен келісе отыртүсіндіріп береді және нәтижелерді әрқайсысы көрсеткіш болатындай, өзінің қалған аргументтеріне жібереді. scanf нәтижесі ретінде мәліметтердің табысты енгізілген элементтер санын қайтарады.

Сондай-ақ стрингтен оқитын (стандарттьы енгізуден емес) sscanf функциясы бар.

int sscanf ( char*string, char*format, arg1,arg2,…)

sscanf функциясы format  форматымен келісе отырып string- ті қарастырады және алынған мәндерді  arg1, arg2,және т.б-ға жібереді. Соңғылары көрсеткіштер болуы керек.

Енгізу форматын түрлендіруді басқару үшін әдетте, бос орын, кәдімгі литерлер түрлендіру спецификациясы, * белгісі, сан сияқты спецификациялардан тұрады.

1 сен 2004 түрдегі мәліметтерден тұратын енгізу жолдарын бізге оқу керек делік.

Scanf-қа назар аудару келесі түрде болады:

int day, year;

char monthname [20];

          scanf ( "%d%s%d”, &day, monthname, &year);

белгісі monthname-нің алдына керек емес, өйткені массив аты функцияның аргументі типіне сәйкес келетін көрсеткіш болады.

Категория: Информатика | Добавил: admin_ (17.11.2013)
Просмотров: 1756 | Теги: ЕНГІЗУ-ШЫҒАРУ ИНТЕРФЕЙСІ с++ қазақш | Рейтинг: 0.0/0
Всего комментариев: 0

Имя *:
Email:
Код *: