![]() |
|
Программирование >> Расширенная версия языка c++
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 ) ;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |