Читайте также:
|
|
1) Функции fgetc() и fputc() позволяют соответственно осуществить ввод-вывод символа.
2) Функции fgets() и fputs() позволяют соответственно осуществить ввод-вывод строки.
3) Функции fscanf() и fprintf() позволяют соответственно осуществить форматированный ввод-вывод и аналогичный соответствующим функциям форматированного ввода-вывода, только делают это применительно к файлу.
Организация работы с файлами средствами C++
Файловый ввод-вывод с использованием потоков
Библиотека потокового ввода-вывода
fstreamФайловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin иcout.
Связь файла с потоком вывода
ofstream имя логического файла;Связь файла с потоком ввода
ifstream имя логического файла;Открытие файла
имя логического файла.open(имя физического файла);Закрытие файла
имя логического файла.close();Изменить поведение по умолчанию, а также задать другие режимы открытия файла можно с помощью следующих констант:
Режимы открытия файла комбинируются с помощью операции поразрядного ИЛИ (|).
Например:
fstream fs("f1.txt", ios_base::in | ios_base::out | ios_base::trunk); // Открытие файла для чтения и записи с удалением содержимого файла |
ifstream ifs("f2.txt", ios_base::in | ios_base::binary); // Открытие двоичного файла для чтения Для записи в текстовый файл строки необходимо проделать следующие шаги: · создать объект класса ofstream; · cвязать объект класса с файлом, в который будет производиться запись; · записать строку в файл; · закрыть файл. |
Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:
· создать объект класса ifstream и связать его с файлом, в который будет производиться запись;
· прочитать файл;
· закрыть файл.
Пример 4. Заполнить файл значениями функции y = x * cos x.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
double fun(double x)
{
return x*cos(x);
}
int main()
{
double a, b, h, x; char s[20];
cout << "Enter the beginning and end of the segment, step-tabulation: ";
cin >> a >> b >> h;
cout << "File name? "; cin >> s;
ofstream f;
f.open(s);
for (x=a; x<=b; x+=h)
{
f.width(10); f << x;
f.width(15); f << fun(x) << endl;
}
f.close();
return 0;
}
Пример 5. Файл содержит несколько строк, в каждой из которых записано единственное выражение вида a#b (без ошибок), где a, b - целочисленные величины, # - операция +, -, /, *. Вывести каждое из выражений и их значения.
#include <cstdlib>#include <iostream>#include <fstream> using namespace std;int main(){ long a, b; char s[256], c; int i; cout << "File name? "; cin >> s; ifstream f; f.open(s); while (!f.eof()) { f.getline(s, 256); i=0; a=0; while (s[i]>='0'&&s[i]<='9') { a=a*10+s[i]-'0'; i++; } c=s[i++]; b=0; while (s[i]>='0'&&s[i]<='9') { b=b*10+s[i]-'0'; i++; } switch (c) { case '+': a+=b; break; case '-': a-=b; break; case '/': a/=b; break; case '*': a*=b; break; } cout << s << " = " << a << endl; } f.close(); return 0;}
Для работы с двоичными файлами используются функции read и write. В качестве параметров функции получают указатель (типа char* для функции read и типа const char* для функции write), который задаёт адрес начала массива для ввода/вывода, и целое число, задающее количество байт для ввода/вывода.
Пример 1 (потоковый вывод). Заполнить бинарный файл некоторым количеством целых случайных чисел.
#include <cstdlib>#include <iostream>#include <fstream> using namespace std;int main(){ofstream f;
int dat;
srand(time(0));
int n=rand()%30+1;
cout << "File name? ";
char s[20];
cin.getline(s, 20);
f.open(s,ios::binary|ios::out|ios::trunc);
for (int i=1; i<=n; i++)
{
dat = rand()%101 - 50;
cout << dat << " ";
f.write((char *)&dat,sizeof(int));
}
cout<<endl;
f.close();
return 0;}Пример 6. (потоковый ввод). Подсчитать сумму ряда целых чисел, заданных в бинарном файле.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream f;
int dat, n=0, sum=0;
cout << "File name? ";
char s[20];
cin.getline(s, 20);
f.open(s, ios::binary|ios::in);
while (f.read((char *)&dat,sizeof(int)))
{
n++;
cout << dat << " ";
sum+=dat;
}
// while (1)
// {
// f.read((char *)&dat,sizeof(int));
// if (f.eof())
// break;
// n++;
// cout << dat << " ";
// sum+=dat;
// }
cout << endl;
cout << "sum: " << sum << "; number: " << n << endl;
f.close();
return 0;
}
Пример 7. Чтение и запись структуры в файл.
#include <cstring>
#include <iostream>
#include <fstream>
using namespace std;
struct mystruct {
long i;
char buf[255];
double d;
};
int main()
{
const char *FName="my_struct.dat"; //Путь к файлу
mystruct X;
//memset(&ms,0,sizeof ms); //можно проинициализировать элементы структуры нулями так
X.i = 10; //записали значение в поле i
X.d = 2; //записали значение в поле d
strcpy(X.buf,"some text"); //Записали значение в поле buf
// открываем файл для записи
ofstream f(FName,ios::binary|ios::out);
f.write((char*)&X,sizeof X); //Записали всю структуру целиком
f.close();
strcpy(X.buf,"\0"); //изменяем поле buf струтктуры X
X.i=0; //изменяем поле i структуры X
//открываем файл для чтения
ifstream in(FName,ios::binary|ios::in);
in.read((char*)&X,sizeof X); //Читаем структуру целиком сразу
in.close();
cout<<X.buf<<"\n"; //Выводим значение из поля структуры. Оно равно some text
return 0;
}
Тема 3. Субъекты предпринимательского права
1. Субъекты предпринимательского права и их признаки
2. Образование и прекращение субъектов предпринимательского права
3. Порядок и основные этапы создания субъектов предпринимательского права
4. Индивидуальный предприниматель как субъект предпринимательского права
5. Лицензирование предпринимательской деятельности
Дата добавления: 2014-12-19; просмотров: 107 | Поможем написать вашу работу | Нарушение авторских прав |