|
Программирование >> Дополнительные возможности наследования
12 13 14 15 16 17 18 19 20 21 22 cout Enter string one: ; cin.getline(stringOne,256); cout << stringOne: << stringOne << endl; cout << Enter string two: ; cin stringTwo; cout << stringTwo; stringTwo endl; cout Enter string three; ; cin.getline(stringThree,256); cout << stringlhree: << stringThree endl; return 0; Enter string one: one two three StringOne: one two three Enter string two: four five six StringTwo: four Enter string three: stringThree: five six Этот пример требует детального исследования, поскольку возможны некоторые сюрпризы. В строках 6-8 объявляются массивы символов. В строке 10 пользователю предлагается ввести строку текста, которая считывается функцией getline(). Аналогично функции get(), параметры getlineO устанавливают буфер ввода и максимальное число символов. Однако, в отличие от get(), функция getlineO считывает и удаляет из буфера символ разрыва строки. Как вы помните, функция get() воспринимает символ разрыва строк как разделитель и оставляет его в буфере ввода. В строке 14 пользователю вновь предлагается ввести строку, которая теперь уже считывается оператором ввода. В нашем примере вводится строка four five six, после чего первое слово four присваивается переменной stringTwo. После отображения предложения Enter string three: снова вызывается функция getline(). Так как часть строки five six все еще находится в буфере ввода, она сразу считывается до символа новой строки. Функция getlineO завершает свою работу, и строкой 20 выводится значение переменной stringThree. В результате третья строка не вводится в программу, поскольку функция getlineO возвращает часть строки, оставшуюся в буфере после операции ввода в строке 15, так как оператор считьшает строку только до первого пробела и вставляет найденное слово в массив символов. Как вы помните, можно использовать несколько вариантов перегруженной функции-члена get(). В первом варианте она не принимает никаких параметров и возвращает значение полученного символа. Во втором принимается ссылка на односимвольную переменную и возвращается объект istream. В третьей, последней версии в функцию get О устанавливаются массив символов, количество считываемых символов и символ разделения (которым по умолчанию является разрыв строки). Эта версия функции get О возвращает символы в массив либо до тех пор, пока не будет введено максимально возможное количество символов, либо до первого символа разрыва строки. Если функция get О встречает символ разрыва строки, ввод прерывается, а символ разрыва строки остается в буфере ввода. функция-член getlineO также принимает три параметра: буфер ввода, число символов в строке с учетом концевого нулевого символа и символ разделения. Функция getlineO действует аналогично описанной выше функции get(), но отличается от последней только тем, что не оставляет в буфере символ разрыва строки. ИсноАьзованив функции с1нлупогв в некоторых случаях возникает необходимость пропустить часть символов строки от начала до достижения конца строки (EOL) или конца файла (EOF). Именно этому и отвечает функция ignoreO. Она принимает два параметра: число пропускаемых символов и символ разделения. Например, вызов функции ignore(80, Дп) приведет к пропуску 80 символов, если ранее не будет найден символ начала новой строки. Последний затем будет удален из буфера, после чего функция IgnoreO завершит свою работу. Использование функции ignoreO показано в листинге 16.8. Авсшииг 1B.S. Исионьзовавие фуитвв ignoreO 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Листинг 16.8. Использование ignoreO flinclude <iostreani.h> int mainO { char string0ne[255]; char stringTwo[255]; cout Enter string one: ; cin.get(stringOne,255); cout String one: stringOne endl; cout << Enter string two: ; cin,getline(stringTwo,255); cout << String two: stringTwo endl; cout Л n\ nNow try again...\ n ; cout Enter string one: ; cin.get(stringOne,255); cout String one: stringOne endl; cin. ignore(255, Д nO: cout << Enter string two: ; cin.getline(stringTwo,255); cout String Two: stringTwo endl; return 0; Enter string one: once upon a time String one: once upon a 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 пользователю предлагается ввести строку. В нашем примере вводится строка опое upon а time. Ввод завершается нажатием <Enter>. В строке 10 для считывания этой строки используется функция get(), которая присваивает эту строку переменной stringOne и останавливается на символе начала новой строки, оставляя его в буфере ввода. В строке 13 пользователю еше раз предлагается ввести вторую строку, однако в этот раз функция getlineO в строке 14 считывает символ разрыва строки, оставшийся в буфере, и сразу же завершает свою работу. В строке 19 пользователю предлагается ввести первую строку. Однако в этом случае для пропуска символа разрыва строки используется функция ignoreO (см. в листинге 16.8 строку 23). Таким образом, при вызове getlineO строкой 26 буфер ввода пуст, и пользователь получает возможность ввести следующую строку. Шункцнп-ЧАВНЫ ревк(1 п pntbackd Объект cin обладает двумя дополнительными методами, которые могут оказаться весьма полезными. Метод рее к () просматривает, но не считывает очередной символ. Метод putbackO вставляет символ в поток ввода. Использование этих методов показано в листинге 16.9. Авсшвнг 1В.9. йсноАьзованвв фувкциб реек() в putbackO 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Листинг 16,9. Использование реекО и putbackO flinclude <iostream.h> int mainO { char ch; cout << enter a phrase: ; while ( cin.get(ch) ) { If (ch == ! 0 cin.putbackC$); else cout ch; while (cin.peekO == #0 cin. ignored, #): return 0; ,. enter a phrase: Now! isflthe! timeflfor! fun#! Now$isthe$timefor$fun$
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |