Главная » Просмотр файлов » 246071-Либерти-Освой-самостоятельно-С-за-21-день

246071-Либерти-Освой-самостоятельно-С-за-21-день (852741), страница 81

Файл №852741 246071-Либерти-Освой-самостоятельно-С-за-21-день (Освой С++ самостоятельно за 1 день. Книга) 81 страница246071-Либерти-Освой-самостоятельно-С-за-21-день (852741) страница 812021-10-05СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 81)

Они используются в тех случаях, когда необходим более совершенныйконтрольнадвводомданных.ВвододногосимволаВариант operator>>, принимающий ссылку на символ, может использоваться длясчитыванияодногосимволасостандартногоустройстваввода.Дляэтогоиспользуетсяфункциячленget().Приэтомможноприменятьget()безпараметровилииспользоватьвариантэтойжефункции,принимающейвкачествепараметрассылкунасимвол.Использованиефункцииgef()безпараметровСначаларассмотримиспользованиефункцииget()безпараметров.ВэтомслучаефункциявозвращаетзначениенайденногосимволаилиEOF(endoffile—конецфайла)придостиженииконца файла. Функция get () без параметров используется редко.

Так, cin.get() нельзяиспользоватьдляпоследовательнойинициализациирядапеременных,посколькувозвращаемоефункциейзначениенеявляетсяобъектомiostream.Именнопоэтомуследующаязаписьработатьнебудет:cin.get()>>myVarOne>>myVarTwo//ошибкаЗапись cin.get() >> myVarOne возвращает значение типа int, а не объект iostream. Примериспользованияфункцииget()безпараметровпоказанвлистинге16.4.Листинг16.4.Использованиефункцииget()Везпараметров1://Листинг16.4.Использованиеget()безпараметров2:#include<iostream.h>3:4:intmain()5:{6:charch;7:while((ch=cin.get())!=EOF)8:{9:cout<<"ch:"<<ch<<endl;10:}11:cout<<"\nDone!\n";12:return0;13:}Примечание:Для выхода из этой программы придется ввести символ конца файла склавиатуры.

С этой целью в операционной системе DOS используется комбинация клавиш<Ctrl+Z>,авUNIX—<Ctrl+D>.Результат:HellochHchech1ch1chоchWorldchWchоchrch1chdch(ctrl-z)Done!Анализ:Встроке6объявляетсялокальнаясимвольнаяпеременная.Вциклеwhileсимвол,полученный от cin.get(), присваивается ch, и если возвращенный символ не EOF, то онвыводитсянапечать.ЦиклзавершаетсявводомEOF,комбинациейклавиш<Ctrl+Z>вDOSили<Ctrl+D>вUNIX.Следуетотметить,чтоневовсехверсияхбиблиотекиistreamподдерживаетсяфункциячленget(),хотясейчасонаявляетсячастьюстандартаANSI/ISO.Использованиефункцииget()спараметромПриустановкевфункцииget()параметра,указывающегонасимвольнуюпеременную,этойпеременной присваивается очередной символ потока ввода.

При этом возвращается объектiostream,чтопозволяетвводитьпоследовательныйрядзначений,какпоказановлистинге16.5.Листинг16.5.Использованиефункцииget()спараметрами1://Листинг16.5.Использованиеget()спараметрами2:#include<iostream.h>3:4:intmain()5:{6:charа,b,с;7:8:cout<<"Enterthreeletters:";9:10:cin.get(a).get(b).get(c);11:12:cout<<"а:"<<а<<"\nb:"<<b<<"\nc:"<<с<<endl;13:return0;14:}Результат:Enterthreeletters:oneа:оb:nс:eАнализ: В строке 6 объявляются символьные переменные а, b и с.

В строке 10 триждыпоследовательно вызывается функция cin.get(). Сначала вызывается cin.get(a), в результатепервый символ буфера ввода заносится в а и возвращается объект cin, после чего происходитвызовcin.get(b),присваивающийочереднойсимволбуферапеременнойb.Аналогичнымобразомвызываетсяфункцияcin.get(c),присваивающаяследующийсимволпеременнойс.Посколькуcin.get()возвращаетcin,можнобылозаписатьэтоследующимобразом:cin.get(a)>>b;Вэтомслучаеcin.get(a)возвратитcin,поэтомуследующеевыражениебудетиметьвид:cin>>b;.Рекомендуется:Используйте оператор ввода >>, когда необходимо вводить значения,разделенные пробелами в строке. Используйте функцию get() с символьным параметром, еслинужнопоследовательновводитьвсесимволыстроки,включаяпробелы.ВводстроксостандартногоустройствавводаДля заполнения массива символов можно использовать как оператор ввода (>>), так иметодыget()иgetline().Еще один вариант перегруженной функции get() принимает три параметра.

Первыйпараметр—этоуказательнамассивсимволов,второйуказываетмаксимальноечислосимволовв строке с учетом концевого нулевого символа, добавляемого автоматически, и третий задаетразделительстрок.Если для второго параметра установлено значение 20, функция get() введет 19 символов иоборвет ввод строки, на которую указывал первый параметр, после чего добавит концевойнулевойсимвол.Третийпараметрпоумолчаниюустанавливаетсякаксимволразрывастроки(\n). Если этот символ повстречается раньше, чем будет введен последний допустимый символстроки,функциявставитвэтомместеконцевойнулевойсимвол,носимволразрывастрокиприэтомостанетсявбуфереибудетсчитаночереднойфункциейввода.Реализацияэтогометодавводапоказанавлистинге16.6.Листинг16.6.Использованиефункцииget()длязаполнениямассивасимволов1://Листинг16.6.Использованиеget()cмассивомсимволов2:#include<iostream.h>3:4:intmain()5:{6:charstringOne[256];7:charstringTwo[256];8:9:cout<<"Enterstringone:";10:cin.get(stringOne,256);11:cout<<"stringOne:"<<stringOne<<endl;12:13:cout<<"Enterstringtwo:";14:cin>>stringTwo;15:cout<<"StringTwo:"<<stringTwo<<endl;16:return0;17:}Результат:Enterstringone:NowisthetimestringOne:NowisthetimeEnterstringtwo:ForallgoodStringTwo:ForАнализ: В строках 6 и 7 создаются два массива символов.

Строка 9 предлагаетпользователюввестистроку,послечеговстроке10вызываетсяфункцияcin.get() с тремя параметрами. Первый параметр ссылается на заполняемый массивсимволов, второй задает максимально возможное количество символов в строке с учетомнулевогоконцевогосимвола('\0').Третийпараметрнеустановлен,ииспользуетсязаданныйпоумолчаниюсимволразрывастроки.Пользователь вводит строку Now is the time. Вся строка вместе с концевым нулевымсимволомпомещаетсявмассивstringOne.Вторую строку пользователю предлагается ввести в строке 13, однако в этом случае ужеиспользуется оператор ввода. Поскольку он считывает строку до первого пробела, во второмслучаевбуферзаноситсястрокаВсе,что,конечноже,неправильно.Одинизспособоврешенияэтойпроблемызаключаетсявиспользованиифункцииgetline(),какпоказановлистинге16.7.Листинг1B.7.Использованиефункцииgetline()1://Листинг16.7.Использованиеgetline()2:#include<iostream.h>3:4:intmain()5:{6:charstringOne[256];7:charstringTwo[256];8:charstringThree[256];9:10:cout<<"Enterstringone:";11:cin.getline(stringOne,256);12:cout<<"stringOne:"<<stringOne<<endl;13:14:cout<<"Enterstringtwo:";15:cin>>stringTwo;16:cout<<"stringTwo:"<<stringTwo<<endl;17:18:cout<<"Enterstringthree:";19:cin.getline(stringThree,256);20:cout<<"stringThree:"<<stringThree<<endl;21:return0;22:}Результат:Enterstringone:onetwothreestringOne:onetwothreeEnterstringtwo:fourfivesixstringTwo:fourEnterstringthree:stringThree:fivesixАнализ: Этот пример требует детального исследования, поскольку возможны некоторыесюрпризы.В строках 6—8 объявляются массивы символов.

В строке 10 пользователю предлагаетсяввести строку текста, которая считывается функцией getline(). Аналогично функции get(),параметры getline() устанавливают буфер ввода и максимальное число символов. Однако, вотличиеотget(),функцияgetline()считываетиудаляетизбуферасимволразрывастроки.Каквыпомните,функцияget()воспринимаетсимволразрывастроккакразделительиоставляетеговбуфереввода.В строке 14 пользователю вновь предлагается ввести строку, которая теперь ужесчитываетсяоператоромввода.Внашемпримеревводитсястрокаfourfivesix,послечегопервоеслово four присваивается переменной stringTwo. После отображения предложения Enter stringthree: снова вызывается функция getline().

Так как часть строки five six все еще находится вбуфереввода,онасразусчитываетсядосимволановойстроки.Функцияgetline()завершаетсвоюработу,истрокой20выводитсязначениепеременнойstringThree.Врезультатетретьястроканевводитсявпрограмму,посколькуфункцияgetline()возвращаетчасть строки, оставшуюся в буфере после операции ввода в строке 15, так как оператор >>считываетстрокутолькодопервогопробелаивставляетнайденноеслововмассивсимволов.Каквыпомните,можноиспользоватьнескольковариантовперегруженнойфунк-ции-членаget(). В первом варианте она не принимает никаких параметров и возвращает значениеполученного символа.

Во втором принимается ссылка на односимвольную переменную ивозвращается объект istream. В третьей, последней версии в функцию get() устанавливаютсямассив символов, количество считываемых символов и символ разделения (которым поумолчанию является разрыв строки). Эта версия функции get () возвращает символы в массивлибодотехпор,поканебудетвведеномаксимальновозможноеколичествосимволов,либодопервого символа разрыва строки.

Если функция get() встречает символ разрыва строки, вводпрерывается,асимволразрывастрокиостаетсявбуфереввода.Функция-член getline() также принимает три параметра: буфер ввода, число символов встрокесучетомконцевогонулевогосимволаисимволразделения.Функцияgetline()действуетаналогично описанной выше функции get(), но отличается от последней только тем, что неоставляетвбуфересимволразрывастроки.Использованиефункции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:intmain()5:{6:charstring0ne[255];7:charstringTwo[255];8:9:cout<<"Enterstringone:";10:cin.get(stringOne,255);11:cout<<"Stringone:"<<stringOne<<endl;12:13:cout<<"Enterstringtwo:";14:cin.getline(stringTwo,255);15:cout<<"Stringtwo:"<<stringTwo<<endl;16:17:cout<<"\n\nNowtryagain...\n";18:19:cin.ignore(255,'\n');20:cout<<"Enterstringtwo:";21:cin.getline(stringTwo,255);22:23:cout<<"StringTwo:"<<stringTwo<<endl;24:25:cout<<"Enterstringone:";26:cin.get(stringOne,255);27:cout<<"Stringone:"<<stringOne<<endl;28:return0;29:}Результат:Enterstringone:onceuponаtimeStringone:onceuponаtimeEnterstringtwo:Stringtwo:Nowtryagain...Enterstringone:onceuponatimeStringone:onceuponatimeEnterstringtwo:therewasaStringTwo:therewasaАнализ: В строках 6 и 7 создаются два массива символов.

Характеристики

Тип файла
PDF-файл
Размер
5,25 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6375
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее