Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C++

Г. Шилдт - Полный справочник по C++ (1109478), страница 83

Файл №1109478 Г. Шилдт - Полный справочник по C++ (Г. Шилдт - Полный справочник по C++) 83 страницаГ. Шилдт - Полный справочник по C++ (1109478) страница 832019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Кроме того, этот пример показывает, что буфером может служить объект любого типа. Если буфер не является символьным массивом, при вызове функций г а() и ахеян необходимо выпопнягль приведение типов. /7оскольку в языке С++ выполняется строгая проверка типов, указатель одного тилв не может ввпюмвтически првобразовыввпк*ся в указатель другого типа. Если конец файла обнаружится прежде, чем будут считаны пит символов, функция геаа() просто прекратит работу, а в буфере будст записано максимально возможное количество символов. Количество считанных символов можно определить с помощью функции яссипс () . Ее прототип выглядит следующим образом.

й встеаввхге дсоипс()' Данная функция возвращает количество символов, считанных при выполнении последней операции бинарного ввода. Рассмотрим еще один пример использования функций теаа(),мтхсе() и дсоипс(). Юхпс1ибе <ховвтеап> Мхпс1иде <бвстеам> ивхпд патеврасе всбз хпв зпахп() ( доиЬ1е хаим(4) = (99. 75, -34. 4, 1776. О, 200. 1); хпс охввтеапз оиг("пипдзетв", зовззоип ) 1ов:збьпазу)з з.б(!оис) ( соис « "Невозможно открыть файл."з теситп 1з ) сис.мхате((снах *) ай~от, взвеси бпипз) оип.с1ове()з Глава 2!. Файловая система гог(1=0; Гке; 1++) // Очистка массива.

Епвв(1] = 0.0; ггвсгеагв 1п("пвлеэегв", ьов::гп ] Ьов:сбьвагу); гп.геаб((сваг *) аглае, вьгеоГ спит); // Определяем количество считанных символов. сове « 'Считано " « Ьп.дсовпс О « ' байтов.1п"; тог(1=0; 1<4; 1++) // Показать значения, считанные ив файла. сове кс Хпшв(1] « ьп. с1ове () тесвтп 0; ) Зта программа записывав~ массив десятичных чисел на жесткий лиск, а зшвм считывает их обрапю. После вызова функции геад() применяется функция дсовпе(), возврашаюшая количество считанных символов.

~~~1 Дополнительные Функции ЯеЦ) Кроме предыдуших форм функция дее() имеет еше несколько перегруженных разновидностей. Рассмотрим три основных прототипа. ) Ьвстеат адес(сваг *ьи/, всгеаывгве пшп); ьвтгеат атее (с)1аг *Ь»Г, вегеатвьге пипи с)1аг г]е(ап); 1пг дет(); Г!ервая форма функции дее считывает символы из массива, на который ссылается указатель Ьи/', пока не будут считаны пигп-1 символов„обнаружен символ перехода на следуюшую строку или достигнут конец файла.

Функция дее() записывает нулсвои символ в конец массива, на который ссылается указатель Ья/: Символ перехода на новую строку пе счыпыеаепк». Он остается в потоке, пока не будет выполнена следуюшая операция ввода. Вторая форма функции дее считывает символы в массив, на который ссылается указатель Ьи/', пока не будут считаны пигп-1 символов, обнаружен символ де/Ьп или достигн)т конец фаила. Функция дев О записывает нулевой символ в конец массива, на который ссылается указатель Ьи/. Символ г/ейяп из потока ве счигпыеаегпс». Он остается в потоке, пока не булст выполнена слсдуюшая операция ввода.

Третья форма функции дее извлекает из потока следующий символ. Если обнаружен конец файла, она возврашает константу вою Эта форма функции дее() похожа на функцию деес() в языке С. Б® Функция ЯейпеЦ Кроме функции дев О в языке С++ существует функция дее11пе(). Она является членом каждого потокового класса, Ее прототипы выглядят следуюшим образом. 1 Ьвггеап адес11пе(сиаг "Ьи/, вегеаавьге пит); 1всгеап ьдес11пе(сваг *ЬиГ, всгеамвьае пиеа, сваг Ие(йп); Часть й. Язык С++ Первая форма функции дее1>пе считывает символы из массива. на который ссылается указатель Ьи/", пока не будут считаны лиаз-1 символов, обнаружен символ перехода на следующую строку или достигнут конец файла.

Функция дее11пе(> записывает нулевой символ в конец массива, на который ссылается указатель Ьи/: Символ перехода на новую строку извлекается из потока, но ие записывается в буфер. Вторая форлза функции дес11пе считывает символы в массив, на который ссылается указатель Ьи/', пока не будут считаны вилз-1 символов, обнаружен символ з/е[зяз или достигнут конец файла.

Функция дес11пе() записывает нулевой символ в конец массива, на который ссылается указатель Ьи/'. Символ з[е(/лз извлекается из потока, но не записывается в буфер. Как видим, две версии функции дес11пе( > очень напоминают версии дес()зпт, пша) И дее(>зпт, Ппп, ДЕ11п). Оци считывают символы из массива, на который ссылается указатель Ьи/", пока не будут считаны лот-1 символов, обнаружен разлелитель или достигнут конец файла.

Разница заключается в том, что в отличие от функции дев () функция дее11пе( > удаляв~ разделитель из потока. Рассмотрим программу, демонстрирующую работу функции дес11пе(). Она считывает содержимое текстового файла и выводит его на экран. // Программа считывает и выводит на экран // строки, считанные из текстового файла. Вупс1пде <ьозттеаю> Вьпс1иде <тзттеаю> изьпд паюезрасе зтг)з упс кзатп(тпс атдс, с)зат *атдзз[)) ( 15(атдс!=2) соие « "Вызов: Вьзр1ау <имя функции>'зп"з тесцтп 1з ) 1тзстеат ьп(атдт[1))з // Ввод 1т(!зп) сопт « "Невозможно открыть файл.

1п"з тееитп 1; ) с)зат ест[255) з иН11е(ьп) ( тп.дее11пе(зет, 255)з // По умолчанию йе11в ьт(>п) сопс «зст «епс)1з ) зхз.с1озе()з тегцтп Оз ) :.~ Распознавание конца файла Распознать конец файла можно с помощью функции вод( >, имеющей прототип >( )зоо1 еоз () з Глава 2(. Файловая система Если достигнут конец файла, она возврашаст значение етое, в противном случае она возврашает значение да1яе. Применение функции еое() иллюстрируется следующей программой, которая выводит на экран содержимое фаила в шестнадцатеричном формате и в виде АБСП- кодов. (Сохранен текст оригинала.

— Прим. дед.) /* Озяр1ау сопсепгя о6 ярес1Нео 611е 1гз )зог)з А5011 ап<) ап Ьех. */ $1пс1иг)е <тоясгеаяз Мтпс1пз)е <Хясгеааз> $1пс1пг)е <сссуре> Вапс1пг)е <аопаптр> ояапд пазаеярасе ясг)з гпг азагп(зпс атдс, с)заг *агдзз(]) ( 16(агдс(=2) ( сост « "цяадез Шяр1ау <611епаве>1зз"з тегпгп 1з ) 16ястеааз 1п(агдзз( 1), тояззтп ~ зояз:Ьгпагу)з 16()1п) ( сонг « ".Оагзпое преп торце 611е.(п"з гегсгп 1; гедзясет 1ззс з, упт сосне = 0; с)зат с(16] з сопя.явей(тояззпррегсаяе); ьиз1е(!зп.еог()) ( 6от(т=Оз 1<16 аа ) ьп.еоЕ()з 1++) зп.дег(с[з])з ) 16(1<16) т —; // дев гаг) ое ео6 бог(1 =Оз з<тз з++) соса «яесззз(3) «)зех «(1пг) с(з] з тот(з З<16з 1++) соне « сопс « " 1с"з бог(З=ОЗ З<з/ З++) за(дяргапе(с(З])) соне « с(З); е1яе попс « сопс «епг)1з соппс++з 16(союзе==16) ( соппс = Оз сонг « "Ргеяя еытни го сопетгюез сз.п.дег()з сопс « епз)1/ ) ) Часть! 1.

з(амк С++ 1п.с1ове() теептп 0; ) Если в качестве параметра этой программы задать ее исходный файл, на экране появятся следующие результаты. -Й Функция щпогеЦ С помогцью функции 1дпоте() можно считать и проигнорировать символ из входного потока. й зветеав 61дпоте(вттеавв1те пиза=1, 1пт Суре г(е(нн=ЕРЕ) Она считывает и отбрасывает символы, пока не будут пропущены линз символов (по умолчанию параметр лит равен 1) или не встретится символ дейл, который по умолчанию равен константе еое. Обнаруженный разделитель не удаляется из потока ввода.

Тип 1пе суре определен как разновидность типа Епе. Следующая программа считывает файл ТЕЯТ. Она игнорирует символы, пока не встретится пробел или не будут считаны 10 символов. Затем она выводит на экран остальную часть файла. №апс1пг)е <уоветеав> №Впс1пг)е <бветеазз> пвьпд павеврасе всг)з 1 с 1пО ( 1йвстеав Вп( севе'); 16(! зп) ( сопс « "Невозможно открыть 4зайл.1п"з теептп 1з ) /* Игнорируются 10 символов, пока не встретится пробел.

*/ 1п.адгзоте(10, ' ')з сиат с; иб11е (1п) Глава 21. файловая система 28 2А 20 ВЕ 74 73 20 бб 69 68 20 41 65 78 2Е 65 20 ЗС ВЕ 63 ВС Р А 23 70 65 ЗЕ бу 6Р 61 61 69 6Е 61 72 20 20 20 69 20 20 78 20 22 55 20 ЗС 66 44 69 20 бв БС 65 53 43 Р А 69 бв 75 64 69 ВЕ Р А бЕ 69 28 69 2А 61 66 28 73 61 69 6С 73 70 66 20 Р А 49 49 2А 28 73 74 65 20 63 6С 23 69 70 ЗЕ ВЕ 74 72 67 61 72 20 20 67 65 65 бЕ 6С 61 73 70 20 20 20 61 Р А 72 65 ЗС бб 75 64 6Е 63 Р А 20 61 76 58 67 63 20 20 ЗА 20 61 ВР 79 20 65 63 20 69 68 64 23 69 61 6Р 73 74 65 20 6С 75 Р А 72 67 5Р 29 21 ЗР 63 бу 44 69 65 ЗЕ 63 68 69 66 ВЕ 20 20 69 6Е 63 ЗЕ Р 72 65 ЗС 63 64 65 69 6Е 63 2С Р А 32 29 75 74 73 70 5С 6Е 6Е 74 65 69 65 64 62 68 74 ВЕ 20 68 бС 75 64 А 23 69 61 6Р ЗЕ 63 74 79 20 ЗС 69 74 20 6Р 20 63 68 78 Р А 20 Р А 20 ЗС ЗС ВС 61 79 22 ЗВ Р /* Равр1ау сопее пев ог ересь Вью гз1е..

1п Ьос Н АВС11 апг) зп Ь ех...*/..№Впс1пд <зовстеат>..№з. пс1пг)е <бвстеав> ..№Впс1пг(е <сосу ре>..№зпс1пде <з овапьр>....гпт в атп(гпе атдс, сй ат *атдзг[))..( 11(атдс!=2) (.. сопс « "Рвадез Рзвр1ау <111епаве>1п"з. гп.пес(с>! гт(тп) оопп « с; ) 1п.с1оее(! теептп 0; ) ~~ Функции рееЩ и рШЬасКО Можно считать слслующий символ из потока, нс извлекая его оттуда. Для этого предназначена фу!!кция рваМ >, имеющая прототип, приведенный ниже. Я гпс суре рееК( >; Эта функция возвращает следующий символ из потока ввода или признак конца файла.

Тип дпс суре определен как разновидность типа дпс Символ, считанный из потока послелним„можно вернуть обратно с помощью функции рпе>засК( >. Ее прототип имеет следующий вид, Я геетеам арпСЬасК(спат г); Здесь параметр г означает символ, считанный последним ~~ Функция ПивйЦ При выводе данные не сразу перслаются Физическому устройству, связанному с потоком.

Вместо этого они накапливаются во внутреннем буфорс, пока он нс заполнится. Однако существует способ принудительно записать информацию из буФера на лиск, не дожидаясь его заполнения Для этого предназначена функция д1пв)з(). Ес прототип имеет следующий вил. $ оестеат ат1пзп(>; Функцию д1пв>г следует вызывать, когда программа выполняется в неблагоприятных условиях (например„если часто происходят сбои питания). Закрытое файла или прекращение работы программы такие очшцает еге буферы.

~1Ы Произвольный доступ Произвольный досзуп к файлу обеспечивается функциями вевкяО и веекр(). Их прототипы имеют следующий вид. дастеат аяеекд(отт Суре о>Ухе>, еееКг(гт олх(к>; олетеаж аееекр(сГГ Суре о))ке>, вееКЙ>т ое!д!н>; Тип еде суре является разновидностью целого типа.

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

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

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

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