Ввод – вывод
В С++ существует две возможности ввода/вывода данных – форматный и неформатный ввод/вывод. Неформатный ввод/вывод осуществляется посредством следующих команд
>> ввод
<< вывод
Но чтобы ими пользоваться необходимо ввести ещё одно понятие – понятие потока данных. С++ полагает, что любая программа всегда имеет дело с двумя потоками байтов данных: входным потоком и выходным. Из входного потока программа получает данные и результаты своей обработки направляет в выходной поток.
Внутри этих потоков нет целых, действительных или массивов или строк. Потоки не имеют структуры. При вводе данные побайтно выбираются из потока и передаются в структуры определённые в программе и уже в них обретают смысл как элементы массива, символы и т.д.
Потоки данных имеют следующие имена:
cin - входной поток
cout - выходной поток
Пример 1. Ввести массив символов
#include <stdio.h>
#include <iostream.h>
void main()
{ int i; char [10];
for (i=0;i<=10;i++) cin >> a[i];
for (i=0;i<=10;i++) cout << a[i];
}
Пример 2. Ввести список номеров имеющих следующий формат (символ, целое число)
#include <stdio.h>
#include <iostream.h>
void main()
{ int i; char a[10];int d[10];
for (i=0;i<=3;i++)
cin >> a[i] >> d[i];
for (i=0;i<=3;i++)
cout << a[i] << “ ” << d[i] << “\n”
}
“\n” – управляющий символ перевода на новую строку.
Форматный ввод/вывод в С++
Для форматного ввода/вывода в С++ предусмотрены две библиотечные функции:
scanf – функция для ввода данных
printf – функция для вывода данных
Они имеют следующий общий вид:
scanf или printf(“Описание формата”, список переменных)
Описание формата может содержать описатели формата и строки символов. Описатель формата устроен следующим образом:
% символ идентифицирующий формат. Для примера запишем программу последнего примера с помощью функций prinf и scanf.
#include <stdio.h>
#include <iostream.h>
void main()
{ int i; char a[10];int d[10];
for (i=0;i<=3;i++)
scanf("%c%d",&a[i], &d[i]);
for (i=0;i<=3;i++)
printf("simbol %c chislo %d \n",a[i],d[i]);
}
Здесь применяются следующие описатели формата:
с – символ
d – целое
Для дальнейшей работы нам к этому списку пока достаточно добавить ещё описатель f – указывающий на ввод величины типа float.
Две полезных функции
Gotoxy(int, int) – установка курсора на экране монитора
Clrscr() – очистка экрана в символьном режиме.
Ввод/вывод из файлов
Работа с файлами требует выполнения следующих шагов:
Создать файловую переменную.
Открыть файл.
Выполнить требуемые операции чтения, записи.
Закрыть файл.
Файловая переменная
Для создания переменной файлового типа имеется специальный тип FILE. Объявление файловой переменной выполняется так
FILE * имя переменной.
Открытие файла
Для открытия файла используется процедура fopen. Она для своей работы требует указания имени файла и способа доступа. Способ доступа – это указание на то, что можно делать с этим файлом. Нам для дальнейшей работы необходимо два способа доступа r – доступ на чтение; w – доступ на запись.
Способы доступа можно указывать одновременно, ниже пример того, как это можно делать.
Работа с файлом
Для операций чтения/записи в С++ используются функции fprintf и fscanf. В отличии от функций scanf и printf для них требуется указать файловую переменную.
Закрытие файла
Для закрытия используется функция fclose (файловая переменная)
#include <stdio.h>
void main()
{ FILE *h; так объявляется файловая переменная
h=fopen("file.dat", "w"); файл открывается на запись
for (int i=1;i<=100;i++) fprintf(h,"%d\n",i); записываются сто целых
fclose(h); файл закрывается
h=fopen("file.dat", "r"); файл открывается на чтение
int a;
for (i=1;i<=100;i++)
{fscanf(h,"%d\n",&a); читается сто целых
printf("%d\n",a); прочитанные числа выводятся на экран.
}
}
Программа записанная ниже решает ту же задачу, что и программа записанная выше, той разницей, что она использует функцию установки файловой переменой в определенную позицию. Её формат следующий:
FSEEK(файловая переменная, позиция, точка отсчёта)
Позиция – число байт которые необходимо отсчитать от точки отсчёта.
Точка отсчёта – точка от которой отсчитывается указанная позиция. Есть несколько способов указать такую точку.
SEEK_SET отсчёт от начала файла.
SEEK_CUR отсчёт от текущей позиции
SEEK_END отсчёт от конца файла
#include <stdio.h>
void main()
{ FILE *h;
h=fopen("file.dat", "wr");
for (int i=1;i<=100;i++) fprintf(h,"%d\n",i);
fseek(h,0,SEEK_SET);
int a;
for (i=1;i<=100;i++)
{fscanf(h,"%d\n",&a);
printf("%d\n",a);
}
}
