Рассмотрим следующий код.
Пример 1
int i = 1, j = 25, i1, j1;
double a = 25e6, a1;
string s("Сидоров"), s1;
ofstreamoutfile("test.txt");// создание файла как выходного потока
…
outfile << i << ‘ ‘ << j << ‘ ‘ << a << ‘ ‘ << s << endl;
outfile.close();// закрытие файла
ifstreaminfile("test.txt");// открытие файла как входного потока
…
infile >> i1 >> j1 >> a1 >> s1;
infile.close();// закрытие файла
Результат
1 25 2.5e+007 Сидоров.
В этом коде создается файл "test.txt", и в него записываются в текстовом виде два целых числа i и j, действительное число aи стро-ка s, содержащая одно слово, после чего манипулятором потока endlосуществляется перевод строки. Причем запись всех этих данных выполняется одним оператором, содержащим сцепленные операции «поместить в поток».
После того как файл закроется, в нем будет записан текст "1 25 2.5e+07 Сидоров". Дальнейшие операторы создают входной поток, связанный с этим файлом и одним оператором, содержащим сцепленные операции «взять из потока», который читает все эти данные.
Продолжим рассмотрение операции <<. Последовательное применение операций «поместить в поток» (сцепленных или задаваемых самостоятельными операторами) приводит к занесению текстов в одну строку, как в рассмотренном выше примере. Если требуется перейти на новую строку, то можно или ввести в текст символ конца строки '\n', или применить манипулятор потока endl(сокращение от end line – конец строки). Например, оператор
outfile << "2 * 2 :\n" << (2 * 2) <<endl;
даст следующий результат: первая строка будет содержать текст "2 * 2 :", вторая – "4", а курсор файла будет переведен на третью строку.
В предыдущих примерах выводились константы и константные выражения. При выводе переменных все работает точно так же. Например, операторы
int i = 25, j = 2;
outfile << i << " * " << j << " = " << (i * j) << endl;
выводят в файл о текст: "25 * 2 = 50".
Помимо этой операции выводить данные в поток можно еще двумя способами: методом putи методом write. Метод putвыводит в поток один символ. Например, оператор
outfile.put('Я');
выведет в поток символ "Я".
Метод write выводит в файл из символьного массива, на который указывает его первый параметр, число символов, указанных вторым параметром. Например, оператор
outfile.write(s,5);
записывает в поток outfile5 символов из массива s. Причем эти символы никак не обрабатываются, а просто выводятся в качестве сырых байтов данных. Среди этих символов, например, может встретиться в любом месте нулевой символ, но он не будет рассматриваться как признак конца строки.
Аналогичный метод read может затем прочитать эти символы в какой-то другой символьный массив и тоже без всякой обработки.
Теперь остановимся на операции «взять из потока» (>>). Эта операция извлекает данные из потока, заданного ее левым операндом, и заносит их в переменную, заданную правым операндом. Операция возвращает поток, указанный как ее левый операнд. Благодаря этому допускаются сцепленные операции «взять из потока». Например, оператор
infile >> i >> j;
прочтет, начиная с текущей позиции файла, связанного с потоком infile, два целых числа в переменные i и j. Если в текущей позиции файла первому из чисел предшествуют пробельные символы или разделители, то они будут пропущены. За окончание числа операция примет первый отличный от цифры символ, в частности, пробельный. Поэтому, если эти два числа были ранее записаны в файл, например, оператором
outfile << i << ' ' << j << endl;
то они прочтутся нормально. Но если они были записаны оператором
outfile << i << j << endl;
т. е. без пробела, то их цифры будут слиты вместе и это составное число прочтется как i, а при чтении j произойдет ошибка.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.