Если при работе с функцией open() идет обращение к несуществующему файлу, то компилятор создаст новый пустой файл. Поэтому необходимо проверять, был ли открыт уже существующий файл. Функция fail() находится в библиотеке fstream.h и результатом этой функции является логическое выражение, и если обращение к функции open() было выполнено неудачно, то fail() возвращает значение “истина”.
# include < iostream >
# include < fstream >
# include < stdlib.h >
main () {
ifstream in;
in.open (“data.txt”, ios::nocreate);
if (in.fail()) {
cout << ” File doesn’t exist \n ”;
exit (1);
}
Для проверки конца файла применяется функция eof() (end of file).
Пример. Требуется переписать последовательность действительных чисел из одного файла в другой.
# include < fstream.h >
main () {
ifstream A;
ofstream B;
A.open (“C:\\Documents and Settings\\POVT\\Data.txt”);
B.open (“C:\\result.txt”);
double a;
while (!A.eof ()) //пока не конец файла
{
A >> a;
B << a << endl;
}
A.close ();
B.close ();
return 0;
}
Условие в скобках оператора while можно написать другим способом, тогда программа будет иметь вид:
# include < fstream.h >
main () {
ifstream A;
ofstream B;
A.open (“C:\\Documents and Settings\\POVT\\Data.txt”);
B.open (“C:\\result.txt”);
double a;
while (A >> a) // пока из потока А идут переменные а
{
B << a << endl;
}
A.close ();
B.close ();
return 0;
}
Форматированный вывод данных
Форматирование – преобразование данных в соответствии с установленными параметрами.
При выводе форматирование позволяет получить данные в файле или на экране в определенном формате. При вводе данных форматирование позволяет считывать данные как значения определенного типа.
Для форматирования в языке С++ используются манипуляторы и функции.
Манипулятор – это функция, которая используется во входном или выходном потоке после операций >> и << (взять или отправить в поток). Манипуляторы бывают двух типов: без параметров и с параметрами.
Манипуляторы без параметров находятся в библиотеке iostream.h.
Манипулятор | Описание |
dec | Используется для перевода числа в десятичную систему счисления |
hex | Используется для перевода числа в шестнадцатеричную систему счисления |
oct | Используется для перевода числа в восьмеричную систему счисления |
endl | Используется для вставки конца строки, выгружения из буфера |
ends | Вставляет нулевой признак конца строки |
Пример использования:
int a = 10;
cout << oct << a << ends;
cout << hex << a << endl;
cout << dec << a;
Манипуляторы с параметрами находятся в библиотеке iomanip.h
Манипулятор | Описание |
setw(n) | Устанавливает ширину поля вывода размером в n позиций |
setfill(c) | Устанавливает символ - «заполнитель» с |
setprecision(n) | Устанавливает точность при выводе действительных чисел |
setiosflags(flag) | Используется для установки флагов форматирования |
resetiosflags(flag) | Используется для сброса флагов форматирования |
Флаги форматирования устанавливают в потоке правила форматирования.
Флаг | Описание |
fixed | Используется для вывода вещественных чисел в формате с фиксированной запятой |
scientific | Используется для представления вещественных чисел с плавающей запятой |
showpoint | Используется для отображения в числе десятичной точки, даже в тех случаях, когда, дробная часть равна нулю |
showpos | Используется для вывода знака «+» перед положительными значениями |
Пример использования:
double a = 2.5;
cout << setw(10) << setfill (‘*’) << setprecision (2);
cout << setiosflags (ios::showpoint) << a << endl;
a = 5E-10;
cout << setw (10) << setfill (‘*’) << setprecision (2);
cout << setiosflags (ios::showpoint | ios::scientific | ios::showpos) << a;
cout << resetiosflags (ios::showpos) << a;
Функции форматирования
Основное отличие использования функций форматирования от манипуляторов заключается в формате обращения к функции. Манипулятор используется после операции “ << ”, функция используется после операции “.” (cout.функция; cout<<манипулятор).
Функции выполняют те же действия что и манипуляторы.
Функция | Описание |
width(n) | Устанавливает ширину поля в n позиций |
fill(c) | Устанавливает символ «заполнитель» с |
precision(n) | Устанавливает точность при выводе действительных чисел |
setf(flags) | Используется для установки флагов форматирования |
unsetf(flags) | Используется для сброса флагов форматирования |
Пример использования:
double a=2.5;
cout.widht (10);
cout.fill (‘*’);
cout.precision (2);
cout.setf (ios::showpoint | ios::scientific | ios::showpos);
cout << a;