![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование функции cin.ignore()Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
В некоторых случаях возникает необходимость пропустить часть символов строки от начала до достижения конца строки (EOL) или конца файла (EOF). Именно этому и отвечает функция ignore(). Она принимает два параметра: число пропускаемых символов и символ разделения. Например, вызов функции ignore(80, '\n') приведет к пропуску 80 символов, если ранее не будет найден символ начала новой строки. Последний затем будет удален из буфера, после чего функция ignore() завершит свою работу. Использование функции ignore() показано в листинге 16.8. Листинг 16.8. Использование функции ignore() 1: // Листинг 16.8. Использование ignore() 2: #include <iostream.h> 3: 4: int main() 5: { 6: char string0ne[255]; 7: char stringTwo[255]; 8: 9: cout << "Enter string one:"; 10: cin.get(stringOne,255); 11: cout << "String one: " << stringOne << endl; 12: 13: cout << "Enter string two: "; 14: cin.getline(stringTwo,255); 15: cout << "String two: " << stringTwo << endl; 16: 17: cout << "\n\nNow try again...\n"; 18: 19: cin.ignore(255,'\n'); 20: cout << "Enter string two: "; 21: cin.getline(stringTwo,255); 22: 23: cout << "String Two: " << stringTwo<< endl; 24: 25: cout << "Enter string one: "; 26: cin.get(stringOne,255); 27: cout << "String one: " << stringOne<< endl; 28: return 0; 29: }
Результат: Enter string one: once upon а time String one: once upon а time Enter string two: String two: Now try again... Enter string one: once upon a time String one: once upon a time Enter string two: there was a String Two: there was a
Анализ: В строках 6 и 7 создаются два массива символов. В строке 9 пользователю предлагается ввести строку. В нашем примере вводится строка once upon а time. Ввод завершается нажатием <Enter>. В строке 10 для считывания этой строки используется функция get(), которая присваивает эту строку переменной stringOne и останавливается на символе начала новой строки, оставляя его в буфере ввода. В строке 13 пользователю еще раз предлагается ввести вторую строку, однако в этот раз функция getline() в строке 14 считывает символ разрыва строки, оставшийся в буфере, и сразу же завершает свою работу. В строке 19 пользователю предлагается ввести первую строку. Однако в этом случае для пропуска символа разрыва строки используется функция ignore() (см. в листинге 16.8 строку 23). Таким образом, при вызове getline() строкой 26 буфер ввода пуст, и пользователь получает возможность ввести следующую строку.
Функции-члены peek() и putback()
Объект cin обладает двумя дополнительными методами, которые могут оказаться весьма полезными. Метод peek()просматривает, но не считывает очередной символ. Метод putback() вставляет символ в поток ввода. Использование этих методов показано в листинге 16.9.
Листинг 16.9. Использование функций peek() В putback() 1: // Листинг 16.9. Использование peek() и putback() 2: #include <iostream.h> 3: 4: int main() 5: { 6: char ch; 7: cout << "enter а phrase: "; 8: while (cin.get(ch)) 9: { 10: if (ch == '!') 11: cin.putback('$'); 12: else 13: cout << ch; 14: while (cin.peek() == '#') 15: cin.ignore(1,'#'); 16: } 17: return 0; 18: }
Результат: enter а phrase: Now!is#the!time#for!fun#! Now$isthe$timefor$fun$
Анализ: В строке 6 объявляется символьная переменная ch, а в строке 7 пользователю предлагается ввести строку текста. Назначение этой программы состоит в том, чтобы заменить все встречающиеся во введенной строке восклицательные знаки (!) знаком доллара ($) и удалить все символы (#). Цикл while в теле функции main() программы прокручивается до тех пор, пока не будет возвращен символ конца файла (вводится комбинацией клавиш <Ctrl+C> в Windows или <Ctrl+Z> и <Ctrl+D> в MS DOS и UNIX соответственно). (Не забывайте, что функция cin.get() возвращает 0 в конце файла.) Если текущий символ оказывается восклицательным знаком, он отбрасывается, а в поток ввода функцией putback() возвращается символ $. Если же текущий символ не является восклицательным знаком, он выводится на экран. Если текущий символ оказывается #, то он пропускается функцией ignore(). Указанный подход далеко не самый эффективный способ решения подобных задач (более того, если символ # будет расположен в начале строки, то программа его пропустит). Но наша основная цель состояла в том, чтобы продемонстрировать работу функций putback() и ignore(). Впрочем, их использование достаточно просто и понятно.
Примечание: Методы peek() и putback() обычно используются для синтаксического анализа строк. Необходимость в нем возникает, например, при создании компилятора.
Ввод данных с помощью cout
Ранее вы уже использовали объект cout вместе с перегруженным оператором вывода (<<) для выведения на экран строк, чисел и других данных. Этот объект позволяет также форматировать данные, выравнивать столбцы и выводить числовые значения в десятичном и шестнадцатеричном формате. Как это сделать, вы узнаете далее.
Очистка буфера вывода
Вы, вероятно, уже заметили, что использование endl приводит к очистке буфера вывода. Этот оператор вызывает функцию-член flush() объекта cout, которая и осуществляет очистку буфера. Вы можете напрямую вызывать метод flush(), либо вызвав функцию-член flush(), либо написав следующее выражение: cout << flush Указанный метод позволяет явно очистить буфер вывода на тот случай, если не вся информация из него была выведена на экран.
Функции-члены объекта cout
Аналогично тому, как мы обращались к методам объекта cin: get() и getline(), с объектом cout можно использовать функции put() и write(). Функция put() выводит один символ на стандартное устройство вывода. Так как эта функция возвращает ссылку на ostream, а cout является объектом ostream, есть возможность последовательного обращения к функции put() для вывода ряда значений, как и при вводе данных. Реализация этой возможности показана в листинге 16.10. Листинг 16.10. Использование функции put() 1: // Листинг 16.10. Использование put() 2: #include <iostream.h> 3: 4: int main() 5: { 6: cout.put('H').put('e').put('l').put('l').put('o').put('\n'); 7: return 0; 8: }
Результат: Hello
Примечание: При запуске этой программы некоторые компиляторы не выведут заданное слово Hello. Если эта проблема коснется и вас, просто пропустите этот листинг и идите дальше.
Анализ: Строку 6 можно представить следующим образом: функция cout.put('H') выводит букву H на экран и возвращает объект cout. Оставшуюся часть выражения можно представить следующим образом: cout.put('e').put('l').put('l').put('o').put('\n'); Выводится буква e, после чего остается cout.put('l'). Таким образом, повторяется цикл, на каждом этапе которого выводится следующая бука и возвращается объект cout. После вывода последнего символа ('\n') выполнение функции завершается. Функция write() работает так же, как и оператор ввода (<<), но она принимает параметр, указывающий максимальное количество выводимых символов. Использование этой функции показано в листинге 16.11. Листинг 16.11. Использование функции write() 1: // Листинг 16.11. Использование write() 2: #include <iostream.h> 3: #include <string.h> 4: 5: int main() 6: { 7: char One[] = "One if by land"; 8: 9: 10: 11: int fullLength = strlen(One) 12: int tooShort = fullLength -4; 13: int tooLong = fullLength +6; 14: 15: cout.write(One,fullLength) << "\n"; 16: cout.write(One,tooShort) << "\n"; 17: cout.write(One,tooLong) << "\n"; 18: return 0; 19: }
Результат: One if by land One if by One if by land i?!
Примечание: На вашем компьютере последняя строка вывода может выглядеть иначе.
Анализ: В строке 7 создается массив символов для заданной строки текста. Длина введенного текста присваивается в строке 11 целочисленной переменной fullLength. Установленное значение переменной tooShort меньше этой длины на четыре единицы, а значение переменной tooLong больше на шесть. В строке 15 с помощью функции write() выводится вся строка, поскольку в качестве первого параметра функции задается полная длина текстовой строки. Строкой 16 вновь выводится строка, однако длина ее на четыре символа меньше, что и отражается в выводе. Еще один вывод данных выполняется в строке 17, однако в этом случае функция write() выводит на шесть символов больше. После заданной строки на экране появятся символы, расположенные в ячейках памяти, следующих за ячейками массива символов.
|
||||||
Последнее изменение этой страницы: 2016-12-10; просмотров: 2508; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.240.134 (0.011 с.) |