Над файловыми переменными возможны только две операции:
– чтение,
– запись.
Вид операций, которые можно совершать с файловыми переменными определяется соответствующей спецификацией, указываемой в операторе открытия файловой переменной, in – для чтения, out, app – для записи и дозаписи соответственно.
Операции с файловыми переменными возможны только после их описания и открытия. Причем, вид операции может быть выполнен только тот, который указан в спецификации оператора открытия файла, то есть ввод или вывод.
Синтаксис операции ввода:
Имя файловой переменной >> имя переменной; |
Например: fr >> a;
Синтаксис операции вывода:
Имя файловой переменной << имя переменной; |
Например: fw << a;
Пример программы с использованием внешних файлов.
В ряде чисел а[N] поменять местами минимальное и максимальное число. Предусмотреть внешние файлы для ввода и вывода данных. N=27.
На рис.14.1 приведена блок–схема вычислений, а ниже программа вычислительного процесса.
|
|
Рис. 14.1 Блок–схема вычислений
# include <fstream.h>
# define N 27
void main()
{
float min, max, r, a[N];
short i;
fstream fr, fw;
fr.open(“c:\\EAPU\\vec.txt”,ios::in);
fw.open(“c:\\EAPU\\res.txt”,ios::out);
for (i= 0; i < N; i ++) // Ввод чисел с внешнего файла
fr >> a[i];
fr.close();
min= max = a[0];
for (i= 1; i < N; i ++)
if (a[i] < min) min = a[i];
else
{
if (a[i] > max) max = a[i];
}
r = min;
min = max;
max = r;
for (i= 0; i < N; i ++) // Вывод чисел во внешний файл
fw << a[i];
fw.close();
}
Представленная программа не предусматривает вывод информации на экран. Вся она помещается на диск c:\, в папку EAPU, в файл с именем res.txt. В программе предусмотрены две файловые переменные: fr и fw. Переменная fr предназначена для ввода данных с внешнего файла vec.txt, о чем свидетельствует спецификация in в операторе ее открытия, а переменная fw предназначена для вывода информации во внешний файл res.txt, что подтверждается спецификацией out. Внешний файл vec.txt создается заранее пользователем в виде последовательности из 27 чисел, а файл res.txt создается автоматически самой программой.
Если информацию из файла fw необходимо вывести на экран, то cледует добавить директиву # include <conio.h> и после оператора fw.close(), что записан в конце программы, вставить следующий фрагмент программы:
fw. unsetf (ios::skipws); // Сброс флага skipws для предотвращения
char ch; // пропуска пробелов
fw. open (“c:\\EAPU\\rez.txt”, ios::in);
// Посимвольный вывод информации с внешнего файла на экран
while (! fw.eof())
{
fw >> ch;
cout << ch;
}
fw. close();
getch();
Этот фрагмент программы показывает порядок перемещения информации с внешнего файла (диска) на экран. Здесь информация перемещается не непосредственно с диска на экран, а через оперативную память посимвольно. Такой порядок объясняется тем, что перемещение информации между периферийными устройствами компьютера (диск – экран) осуществляется только через оперативную память. Поэтому во фрагменте программы предусмотрена переменная символьного типа char ch, для которой резервируется в оперативной памяти однобайтовая ячейка. Эта переменная используется как промежуточное звено в процессе перемещения текстовой информации. В этом случае символ с внешнего файла помещается в эту ячейку, в качестве значения символьной переменной ch, а затем с этой ячейки – на экран. Таким образом, вся информация, символ за символом, поступает с внешнего файла на экран. Процесс этот будет продолжаться до тех пор, пока не обнаружится признак конца файла, что определяется функцией eof(). Запись заголовка цикла while (! fw.eof()) следует интерпретировать так: пока не обнаружен конец файла, связанного с файловой переменной fw, продолжать циклическую операцию.
|
|