Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / C / C++ / Введение в язык C++ / Потоки /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Ввод - Программирование от RIN.RU
Ввод




Ввод аналогичен выводу. Имеется класс istream, который предоставляет операцию >> ("взять из") для небольшого множества стандартных типов. Функция operator >> может определяться для типа, определяемого пользователем.


Ввод Встроенных Типов


Класс istream определяется так:


class istream {
// ...
public:
istream& operator>>(char*); // строка
istream& operator>>(char&); // символ
istream& operator>>(short&);
istream& operator>>(int&);
istream& operator>>(long&);
istream& operator>>(float&);
istream& operator>>(double&);
// ...
};


Функции ввода определяются в таком духе:


istream& istream::operator>>(char& c);
{
// пропускает пропуски
int a;
// неким образом читает символ в "a"
c = a;
}


Пропуск определяется как стандартный пропуск в C, через вызов isspase() в том виде, как она определена в (пробел, табуляция, символ новой строки, перевод формата и возврат каретки).


В качестве альтернативы можно использовать функции get():


class istream {
// ...
istream& get(char& c); // char
istream& get(char* p, int n, int ="\n"); // строка
};


Они обрабатывают символы пропуска так же, как остальные символы. Функция istream::get(char) читает один и тот же символ в свой параметр; другая istream::get читает не более n символов в вектор символов, начинающийся в p. Необязательный третий параметр используется для задания символа остановки (иначе, терминатора или ограничителя), то есть этот символ читаться не будет. Если будет встречен символ ограничитель, он останется как первый символ потока. По умолчанию вторая функция get будет читать самое большее n символов, но не больше чем одну строку, "\n" является ограничителем по умолчанию. Необязательный третий параметр задает символ, который читаться не будет. Например:


cin.get(buf,256,"\t");


будет читать в buf не более 256 символов, а если встретится табуляция ("\t"), то это приведет к возврату из get. В этом случае следующим символом, который будет считан из cin, будет "\t".


Стандартный заголовочный файл определяет несколько функций, которые могут оказаться полезными при осуществлении ввода:


int isalpha(char) // "a".."z" "A".."Z"
int isupper(char) // "A".."Z"
int islower(char) // "a".."z"
int isdigit(char) // "0".."9"
int isxdigit(char) // "0".."9" "a".."f" "A".."F"
int isspase(char) // " " "\t" возврат новая строка
// перевод формата
int iscntrl(char) // управляющий символ
// (ASCII 0..31 и 127)
int ispunct(char) // пунктуация: ниодин из вышеперечисленных
int isalnum(char) // isalpha() | isdigit()
int isprint(char) // печатаемый: ascii " ".."-"
int isgraph(char) // isalpha() | isdigit() | ispunct()
int isascii(char c) { return 0<=c &&c<=127; }


Все кроме isascii() реализуются внешне одинаково, с применением символа в качестве индекса в таблице атрибутов символов. Поэтому такие выражения, как


(("a"<=c && c<="z") || ("A"<=c && c<="Z")) // алфавитный


не только утомительно пишутся и чреваты ошибками (на машине с набором символов EBCDIC оно будет принимать неалфавитные символы), они также и менее эффективны, чем применение стандартной функции:


isalpha(c)


Вперед  >>>
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Введение

Вывод

Файлы и Потоки

Работа со Строками

Буферизация

Эффективность

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь