Функция проверки успешности открытия файла fail ( )

Если при работе с функцией 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 ;

Наши рекомендации