|
Программирование >> Структурное программирование
figll 13. срр . f Сопоставление ввода строки с помощью cin and cin.get. #include <iostream.h> const int SIZE = 80; main {) char bufferl[SIZE], buffer2[SIZE]; cout Введите предложение: endl; cin >> bufferl; cout endl Из cin прочитана строка: endl bufferl endl endl; cin.get (buf fer2, SIZE); cout Строка, прочитанная с помощью cin.get: endl buffer2 endl; return 0; Введите предложение: Сравнение ввода строки с помощьк) cin и cin.get Из cin прочитана отрока: % Сравнение Строка, прочитанная с помощью cin.get: ввод строки с помощью cin и cin.get Рис. 11.13. Сравнение ввода строки из cin с помощью операции взять из потока и с помощью cin.get Функция-элемент getline действует подобно третьему варианту функции-элемента get и помещает нулевой символ после строки в символьном массиве. Но в отличие от get функция getline удаляет символ ограничитель из потока (т.е. читает этот символ и отбрасывает его); этот символ не сохраняется в символьном массиве. Программа, приведенная на рис. 11.14, демонстрирует использование функции-элемента getline для ввода строки текста. мального числа, или пока не считывается ограничитель. Затем для завершения введенной строки в символьный массив, используемый в качестве буфера программы, помещается нулевой символ. Ограничитель в символьный массив не помещается, а остается во входном потоке (он будет следующим считываемым символом). Таким образом, результатом второго подряд использования функции get явится пустая строка, если только ограничитель не удалить из входного потока. Программа на рис. 11.13 сравнивает ввод, использующий для cin операцию взять из потока (которая читает символы до тех пор, пока не встречается символ разделитель), и ввод с помощью cin.get. Обратите внимание, что в обращении к cin.get не задается символ ограничитель, так что по умолчанию используется \п. 11.4.3. Другие функции-элементы класса istream (реек, putbacic. Ignore) Функция-элемент ignore пропускает заданное число символов (по умолчанию один символ) или завершает свою работу при обнаружении заданного ограничителя (по умолчанию символом ограничителем является EOF, который заставляет функцию ignore пропускать до конца файла при чтении из файла). Функция-элемент putback возвращает обратно в этот поток предыдущий символ, полученный из входного потока с помощью функции get. Функция полезна для приложений, которые просматривают входной поток с целью поиска записи, начинающейся с заданного символа. Когда этот символ введен, приложение возвращает его в поток, так что он может быть включен в те данные, которые будут вводиться. Функция-элемент реек возвращает очередной символ из входного потока, но не удаляет его из потока. 11.4.4. Сохранение типов данных при вводе-выводе Язык С++ обеспечивает сохранение типов данных при вводе-выводе потоков. Операции и перегружены так, чтобы принимать элементы данных заданных типов. Если обрабатываются непредусмотренные данные, то устанавливаются различные флаги ошибок, с помощью которых пользователь figll 14.cpp Ввод символа с помощью функции-элемента getline. tinclude <iostream.h> const int SIZE = 80; main() char buffer[SIZE]; cout << Введите предложение: endl; cin.getline(buffer, SIZE); cout << endl << Введенное предложение: endl buffer endl; return (0); } Введите предложение: Использование функции-элемента getline Введенное предложение: Использование функции-элемента getline Рис. 11.14. Ввод символов с помощью функции-элемента getline 11.5. Неформатированный ввод-вывод с использованием read, gcount и write Неформатированный ввод-вывод выполняется с помощью функций-элементов read и write. Каждая из них вводит или выводит некоторое число байтов в символьный массив в памяти или из него. Эти байты не подвергаются какому-либо форматированию. Они просто вводятся или выводятся в качестве сырых байтов данных. Например, вызов char buffer[ ] = ПОЗДРАВЛЯЕМ С ДНЕМ РОЖДЕНИЯ ; cout.write(buffer, 12); выводит первые 12 байтов символьного массива buffer (включая нулевые символы, которые могут быть выведены в cout и завершить операцию ). Поскольку символьная строка указывает на адрес своего первого символа, то вызов cout.write( ABCDEFGYIJKLMNOPQRSTUVWXYZ , 10); отобразит на экране первые 10 символов алфавита. Функция-элемент read вводит в символьный массив указанное число символов. Если считывается меньшее количество символов, то устанавливается флаг failbit. Позже мы увидим, каким образом определять, установлен ли флаг failbit (см. раздел 11.8). Функция-элемент gcount сообщает о количестве символов, прочитанных последней операцией ввода. Программа на рис. 11.15 показывает работу функций-элементов read и gcount класса istream и функции-элемента write класса ostream. Программа вводит 20 символов (из более длинной входной последовательности) в массив символов buffer с помощью функции-элемента read, определяет число введенных символов с помощью gcount и выводит символьный массив buffer с помощью write. 11.6. Манипуляторы потоков в языке C-f-+ имеется возможность использовать манипуляторы потоков, которые решают задачи форматирования. Манипуляторы потоков позволяют выполнять следующие операции: задание ширины полей, задание точности, установку и сброс флагов формата, задание заполняющего символа полей, сброс потоков, вставку в выходной поток символа новой строки и сброс потока, вставку нулевого символа в выходной поток и пропуск символов разделителей во входном потоке. Более подробные сведения о манипуляторах приведены ниже. может определить, были ли операции ввода-вывода успешными, или нет. Таким способом программа контролирует типы. Мы обсудим флаги ошибок в разделе 11.8.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |