Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Открытие текстового файла для записи




Для открытия и записи в файл используются переменная fstream <имя_переменной>; оператор <переменная_потока>.open(путь_к_файлу, режим);

Для закрытия файла используется оператор <переменная_потока>.close();

Пример: открытие файла1 для записи в колонку пяти вещественных чисел.

 

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

int i, n=5; float a;

fstream file1; //объявляет имя потока для записи/чтения данных в файл

file1.open("C:\\SOURCE\\qwerty.dot", ios::out); //cоздается файл

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file1<<a<<endl; //запись переменной а в файл

}

file1.close(); //закрытие потока

return 0;

}

Если файл с таким именем уже существует, то он будет перезаписан, если файл не существует, то он создается заново. Следует следить за соответствием типа вводимой переменной. При любой попытке ввода литеры (char) вместо float файл заполняется n нулями и закрывается.

Пример: открытие файла1 для записи в строку пяти вещественных (целых) чисел.

 

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

int i, n=5; float a;

fstream file1; //объявляет имя потока для записи/чтения данных в файл

file1.open("C:\\SOURCE\\qwerty.dot", ios::out); //cоздается файл

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file1<<a<<" "; //запись переменной а в файл

}

file1.close(); //закрытие потока

return 0;

}

 

Пример: открытие файла2 для записи 3-х строк (пробел – начало следующей строки).

 

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text; }

int main()

{

int i, n=3; string a;

ofstream file2; //объявляет имя потока для записи строки в файл

file2.open("C:\\SOURCE\\qwerty.dot", ios::out);

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file2<<a<<endl; //запись строки а в файл

}

file2.close(); //закрытие потока

return 0;

}

 

Использование указанного файла во многих случаях не совсем удобно, т.к. символы перехода на новую строку, табуляции, пробел в операторе cin интерпретируются компилятором как нуль-символ (конец строки). Например, при вводе строки без пробела

Иванов-36лет

Петров-17лет

Сидоров-50лет

в файл все запишется корректно, как есть.

Но, при вводе

Иванов – 36 лет

Петров – 17 лет

Сидоров – 50 лет

в файл все запишется

Иванов

Поэтому более корректно использовать строчные переменные, содержащие как сами данные, так и их наименование. Для выхода из цикла можно использовать любую заданную строку (например, eof), но ни в коем случае не пытаться внести вручную символ операционной системы “конец файла”, который компилятор создает автоматически при закрытии файла. Попытка эмуляции символа “конец файла” (например, Ctrl^Z) обычно приводит к зависанию программы.

Пример: открытие файла3 для записи произвольного числа строк (с пробелами).

 

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

string str; // объявляется длина строки

fstream file3; //объявляется имя потока для записи данных в файл

file3.open("C:\\SOURCE\\qwerty.dot", ios::out);

cout<<Rus("Введите данные: ")<<endl;

while (str!=" eof ")

{

getline(cin,str);

file3<<str<<endl; //запись пока не введена строка eof

}

file3.close(); //закрытие потока

return 0;

}

 


В полученном файле имеем

Иванов – 36 лет

Петров – 17 лет

Сидоров – 50 лет




Поделиться с друзьями:


Дата добавления: 2014-11-25; Просмотров: 421; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.