Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Для определения конца файлового потока используется функция feof(), прототип которой описан в заголовочном файле <stdio.h>. Функция возвращает истину (1), если внутренний указатель заданного файлового потока находится за последним байтом файла (достигнут конц файла – EOF), и ложь (0), если внутренний указатель находится не в конце файла.
int feof(FILE * filename);Пример: определить количество отрицательных элементов в файле Neg.dat
#include <stdio.h>
#include <stdlib.h>
void main(){
FILE *f_n;
int kol_vo = 0; // количество «-«элементов
int value;
randomize();
f_n = fopen(“Neg.dat”, ”rb) // чтение в двоичном режиме
if(!f_n) // если указатель равен 0 (не связался)
{puts(“Нельзя открыть файл!\n”);
exit(1);
}
while (!foef(f_n)); // пока не конец файла
{fread(&value, sizeof(int), 1, f_n);
if(value < 0) kol_vo++;
}
printf(“Количество «-«элементов = %d\n”, kol_vo);
fclose(f_n);
}
Функции ввода-вывода данных файла
Для использования функций ввода/вывода в стиле С необходимо подключить к программе заголовочный файл <stdio.h> или <cstdio>, в которых описан формат стандартных файлов ввода/вывода. Имена стандартных файлов ввода/вывода для языка представлены в табл.2. При вводе/выводе данные рассматриваются как поток байтов. В момент начала выполнения программы на языке С автоматически открываются три потока: stdin, stdout, stderr.
Таблица 2. Потоки, определяемые в языке С.
| Имя стандартного файла | Описание |
| stdaux | Последовательный ввод/вывод |
| stderr | Выходной поток ошибок |
| stdin | Стандартный ввод |
| stdout | Стандартный вывод |
| stdprn | Вывод на принтер |
По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr соответствует экран монитора.
Ввод/вывод в поток можно осуществлять различными способами:
- в виде последовательности байтов;
- в виде символов и строк;
- с использованием форматных преобразований.
Для каждого вида операций определен свой набор функций.
Операции ввода/вывода выполняются начиная с текущей позиции потока, определяемой положением указателя потока. Указатель устанавливается при открытии на начало или конец файла (в соответствии с режимом открытия) и изменяется автоматически после каждой операции ввода/вывода. Текущее положение указателя можно получить с помощью функций ftell() и fgetpos() и задать явным образом с помощью функций fseek() и fsetpos(). Эти функции нельзя использовать для стандартных потоков. Ниже перечислены основные функции ввода/вывода потока (см. табл.3).
Таблица 3. Основные функции ввода/вывода потока.
| Название | Назначение |
| В виде последоватеьности байтов | |
| fread | Чтение потока байтов |
| fwrite | Запись потока байтов |
| В виде символов и строк | |
| getc, fgetc | Чтение символа из потока |
| getchar | Чтение символа из стандартного потока stdin |
| putc, fputc | Запись символа в поток |
| putchar | Запись символа в стандартный поток stdout |
| fgets | Чтение строки из потока |
| gets | Чтение строки из стандартного потока stdin |
| fputs | Запись строки в поток |
| puts | Запись строки в стандартный поток stdout |
| С форматированием | |
| fscanf | Форматированный ввод из потока |
| scanf | Форматированный ввод из стандартного потока stdin |
| sscanf | Форматированный ввод из строки |
| fprintf | Форматированный вывод в поток |
| printf | Форматированный вывод в стандартный поток stdout |
| sprintf | Форматированный вывод в строку |
1) Символьный ввод-вывод
Для символьного ввода-вывода используются функции:
int fgetc(FILE *fp);где fp – указатель на поток, из которого выполняется считывание.
Функция возвращает очередной символ в формате int из потока fp. Если символ не может быть прочитан, то возвращается значение EOF.
int fputc(int c, FILE*fp);где fp– указатель на поток, в который выполняется запись;
c – переменная типа int, в которой содержится записываемый в поток символ.
Функция возвращает записанный в поток fp символ в формате int. Если символ не может быть записан, то возвращается значение EOF.
Пример.
#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ FILE *f; int c; char *filename="t.txt"; if ((f=fopen(filename,"r"))==0) perror(filename); else while((c = fgetc(f))!= EOF) putchar(c); //вывод с на стандартное устройство вывода fclose(f); system("pause"); return 0;}
2) Строковый ввод-вывод
Для построчного ввода-вывода используются следующие функции:
char *fgets(char *s, int n, FILE *f);где char *s– адрес, по которому размещаются считанные байты;
int n– количество считанных байтов;
FILE *f– указатель на файл, из которого производится считывание.
Прием байтов заканчивается после передачи (n-1) байтов или при получении управляющего символа '\n'. Управляющий символ тоже передается в принимающую строку. Строка в любом случае заканчивается '\0'. При успешном завершении считывания функция возвращает указатель на прочитанную строку, при неуспешном – 0.
int fputs(char *s, FILE *f);где char *s– адрес, из которого берутся записываемые в файл байты;
FILE *f– указатель на файл, в который производится запись.
Символ конца строки ('\0') в файл не записывается. Функция возвращает EOF, если при записи в файл произошла ошибка, при успешной записи возвращает неотрицательное число.
Пример. Построчное копирование данных из файла f1.txtв файл f2.txt.
#include "stdafx.h"#include <iostream>using namespace std;#define MAXLINE 255 //максимальная длина строкиint _tmain(int argc, _TCHAR* argv[]){//копирование файла in в файл out FILE *in, //исходный файл *out; //принимающий файл char buf[MAXLINE]; //строка, с помощью которой выполняется копирование in=fopen("f1.txt","r"); //открыть исходный файл для чтения out=fopen("f2.txt","w"); //открыть принимающий файл для записи while(fgets(buf, MAXLINE, in)!=0) //прочитать байты из файла in в строку buf fputs(buf, out); //записать байты из строки buf в файл out fclose(in); //закрыть исходный файл fclose(out);//закрыть принимающий файл system("pause"); return 0;}3) Ввод-вывод блоками
Для блокового ввода-вывода используются функции:
int fread(void *ptr, int size, int n, FILE *f);где void *ptr– указатель на область памяти, в которой размещаются считанные из файла данные;
int size– размер одного считываемого элемента;
int n– количество считываемых элементов;
FILE *f– указатель на файл, из которого производится считывание.
В случае успешного считывания функция возвращает количество считанных элементов, иначе – EOF.
int fwrite(void *ptr,int size, int n, FILE *f);где void *ptr– указатель на область памяти, в которой размещаются считанные из файла данные;
int size– размер одного записываемого элемента;
int n– количество записываемых элементов;
FILE *f– указатель на файл, в который производится запись.
В случае успешной записи функция возвращает количество записанных элементов, иначе – EOF.
Пример.
#include "stdafx.h"#include <iostream>using namespace std;struct Employee {char name[30]; char title[30]; float rate; };int _tmain(int argc, _TCHAR* argv[]){ Employee e; FILE *f; if((f=fopen("text.dat","w"))==NULL) { printf("\nФайл не открыт для записи"); } int n; //запись в файл printf("\nВведите количество записей N="); scanf("%d",&n); for(int i=0;i<n;i++) { //формируем структуру е printf("имя:");scanf("%s",&e.name); printf("наименование:");scanf("%s",&e.title); printf("налог:");scanf("%f",&e.rate); //записываем е в файл fwrite(&e,sizeof(Employee),1,f); } fclose(f); //чтение из файла if((f=fopen("text.dat","rb"))==NULL) printf("\nФайл не открыт для чтения"); while(fread(&e,sizeof(Employee),1,f)) printf("%s, %s, %f;\n", e.name, e.title, e.rate); fclose(f); system("pause"); return 0;}4) Форматированный ввод-вывод
В некоторых случаях информацию удобно записывать в файл без преобразования, т.е. в символьном виде, пригодном для непосредственного отображения на экран. Для этого можно использовать функции форматированного ввода-вывода:
int fprintf(FILE *f, const char *fmt, par1, par2,...);где FILE*f– указатель на файл, в который производится запись;
const char *fmt– форматная строка;
par1, par2,... – список переменных, в которые заносится информация из файла.
Для форматированного чтения данных из файла удобно использовать функцию
int fscanf(FILE *f, const char *fmt, &par1, &par2,...);где FILE*f– указатель на файл, в который производится запись;
const char *fmt– форматная строка;
par1, par2,... – список переменных, из которых считывается информация в файл.
Пример.
#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ FILE *f; int n, nn,m; if((f=fopen("int.dat","w"))==0) perror("int.dat"); for(n=1;n<11;n++) fprintf(f, "\n%d %d", n, n*n); fclose(f); if ((f=fopen("int.dat","r"))==0) perror("int.dat"); m=1; while(fscanf(f, "%d %d",&n, &nn)&& m++<11) printf("\n%d %d",n,nn); fclose(f); system("pause"); return 0;3.2.2 Особенности работы с текстовыми файлами:
Текстовый файл состоит из последовательности символов, разбитой на строки путем использования управляющего символа \n.
Способы обработки:
- посимвольная
- или построчная обработка.
Размещение файлов на диске, их идентификация и доступ к ним осуществляются с помощью таблицы размещения файлов (FAT).
|
|
|
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!