Программирование >>  Расширенная версия языка c++ 

1 ... 92 93 94 [ 95 ] 96 97 98 ... 227


char ch;

ofstream out( test , ios::out ios::banary);

if(lout) {

cou << Файл открыть невоэможноХп ;

return 1;

} ,

char str[80], *p;

ou 12 this is a test< 23;

out Hello there! 99 sdf endl; out.closeO;

ifstream in ( test , ios::in l ios: : binary);

if (!in} { .- . . .

cou Файл открыть невоэможноХп ;

return 1;

} г .- . г

do {

p = str;

ch ek(); выяснение типа следующего символа i;: j..

if(isdigit(eh)) {

while (isdigit (*p=in.get ()) ) p+--; считывание целого

in.putback(*p); возврат символа в поток

*р 0; заканчиваем строку нулем

cout Целое: <--- aLoiU-x); . .l

else { считывание строки

while (isalpha (*p=in.get П И n+t ;

возврат символа в поток *р 0 заканчиваем строку нулем cout Строка: str;

else in.getO; пропуск -: .

cout Xn;

} while{ lin.eof {) ) ; , . . .,:,.-.ц. ,

in.closeO; *

return 0;

1. Перепишите программу из примера I так, чтобы вместо функции getline() использовать функцию get(). Будет ли отличаться работа программы?



9.5. Произвольный доступ

в системе ввода/вывода С++ произвольный доступ (random access) реализуется с помощью функций seekgO и seekp(), являющихся соответственно потоковыми функциями ввода и вывода. Здесь показаны их основные формы:

istream fiseekg(off typ ение, seekdir -задание) ; ostream fiseekp(off type смещение, seekdir задание);

Здес type -- это целхй тип даннхх, определеннхй в классно* и совместимый с максимальным правильным значением, которое способен хранить параметр смещение. Тип seekdir - эт тасление, определенное в классе ios и содержащее следующие значения:

Значение Смысл

Ios:: beg Поиск с начала файла

Ios: :cur Поиск от текущей позиции в файле :

iosnd Поиск с конца файла

Система ввода/вывода C++ управляет двумя указателями, связанными с файлом. Первый - это указатель считывания (get pointer), который задает следующее место в файле, откуда будет вводиться информация. Второй -это указатель записи (putpointer), который задает следующее место в файле, куда будет выводиться информация. При каждом вводе или выводе соответствующий указатель последовательно продвигается дальше. Однако с помощью функций seekgO и seekp() возможен непоследовательный доступ к

файлу.

Функции kg() устанавливает указатель считывания соответствующего файла в позицию, отстоящую на величину смещение от заданного места задание. Функция seekp() устанавливает указатель записи соответствующего файла в позицию, отстоящую на величину смещение от заданного места задание.

Как правило, файлы, доступные для функций seekgO и seekp(), должны открываться в режиме операций для двоичных файлов. Таким образом предотвращается возможное неожиданное преобразование символов внутри файла.

Определить текущую позицию каждого из двух указателей можно с помощью функций:

2. Напишите программу для построчного считывания текстового файла и вьшо-да каждой считанной строки на экран. Используйте функцию getline().

3. Подумайте о ситуациях, в которых может оказаться полезным вызов функции flush().



Примеры 1 . ii

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

для замены. Обратите внимание: файл открывается для операций чтения и записи.

#include <iostream> #include <f3tream>

ttinclude <cstdlib>

using namespace std; - .

in Unt argc, char *argv[])

if(argc!=4) {

cout Замена: <файл> <байт> <симбол>\п ;

return 1;

fstream out(argv[l] : :in ::oul; ios: :binary) ;

if(!out) {

cout Файл открыть невозможно \n ;

return 1;

out.seekp(atoi(arqv[2]), ios::beg);

out,put(*argv[3] ) ; ;->r,. i >: . i

return 0; tuVj .;>J;.-.-

pos type tellgO ; л> .щ. , . . :.

poB type tellp о; : ,

Здес type - это целый тип данных, определенный в классе ios и способный хранить наибольшее возможное значение указателя.

Для перемещения файловых указателей считывания и записи на позицию, заданную возвращаемыми значениями функции р(), используют-

ся перегруженные версии функций seekg() и seekp(). Прототипы этих функций представлены ниже:

istream useekg(pos type позиция); .. - f,;

ostreamfiseekp(postYpeji03m ) ;



1 ... 92 93 94 [ 95 ] 96 97 98 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика