Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые / Язык программирования Сpp 25.09.11.doc
Скачиваний:
114
Добавлен:
10.05.2015
Размер:
10.13 Mб
Скачать
    1. Что вам необходимо знать

Каждая созданная вами на C++ программа будет, вероятно, использоватьcin или cout для выполнения операций ввода и вывода. Этот урок посвящен некоторым манипуляторам В/В и функциям, которые вы можете использовать с потоками cin и cout. По мере усложнения ваших программ они часто будут сохранять информацию в файлах. Из урока 34 вы узнаете, как в C++ выполнять операции файлового ввода и вывода. Прежде чем приступить к изучению урока 34, убедитесь, что вы освоили следующие основные концепции:

    1. cin и cout являются объектами (переменными) классов i streamи ostream, которые определены в заголовочном файлеiostream.h. А если так, они предоставляют функции, которые ваши программы могут вызывать для решения определенных задач.

    2. Функция cout.width позволяет вашим программам указать минимальное количество символов, которые будет использовать следующее выходное значение.

    3. Функция cout. fill позволяет вашим программам указать символ, который cout будет использовать для заполнения пустого пространства устанавливаемого с помощью cout.widthили setw.

    4. Манипулятор setprecision позволяет вашим программам управлять количеством цифр, выводимых справа от десятичной точки для значений с плавающей точкой.

    5. Функции cin.get и cout.put позволяют вашим программам вводить или выводить один символ.

    6. Функция cin.getline позволяет вашим программам читать строку текста с клавиатуры.

5.2. Ввод имен файлов

В примере, который мы только, что рассмотрели, имя файла было задано в программе в виде, так называемой, строки, т.е. текста заключенного в кавычки. О строках мы еще будем говорить позднее. А сейчас подумаем вот над чем. Нельзя ли имя файла прочитать из другого файла? Ответ можно предсказать – конечно, это возможно. Но чтобы не запутаться в файлах заранее дадим им имена. Рабочий файл в который записывается информация назовем workFaile.dat, а файл содержащий имя рабочего файла будем называть nameFile.

Далее поступим следующим образом. В разрабатываемой программе создадим массив символов nameWork[n] в который запишем имя рабочего файла в кавычках. Это значит, что размер массива n должен хотя бы на единицу превосходить количество символов в имени рабочего файла, в данном случае workFile.dat содержит 12 символов, т.е. величина n должна быть не менее 13. Напомним, что индексация элементов массива начинается с нуля. Если имя рабочего файла заранее неизвестно, то создавая такой массив следует заранее предусмотреть максимально возможный размер. После того как имя рабочего файла будет помещено в массив, последний можно записать в виде файла, подобно тому как мы только что сделали в предпоследнем примере. При необходимости это имя будет прочитано и программа создаст необходимые потоки ввода-вывода.

Как всегда рассмотрим пример. Создадим программу, которая вводит 4 целых числа. Затем спрашивает имя рабочего файла. После чего вычисляет разность соседних чисел, которая записывается в рабочий файл. Далее программа читает рабочий файл и выводит его на экран.

#include <iostream> //библиотека ввода вывода с использованием

//стандартных устройств

#include <fstream> //библиотека ввода из файла

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

#include<windows>

using namespace std;

main(){

ifstream inStream; //объявление потока ввода из файла

ofstream outStream; //объявление потока вывода в файл

int number[4], diskr[3];

char nameWork[15]; //строка для записи имени рабочего файла

SetConsoleOutputCP(1251);

cout<<"Введите 4 числа \n";

for(int i=0; i<4;i++) {

cin>>number[i];

}

cout<<"Введите имя рабочего файла \n"; /*Имя файла в который

записываются числа*/

cin>>nameWork;

outStream.open("nameFile");//присоединение файла с именем к потоку

outStream<< nameWork; //запись имени рабочего файла в потоке

inStream.open("nameFile"); //присоединение файла с именем

// рабочего файла к входному потоку

for(int i=1; i<4;i++) {

number[i]=number[i]-number[i-1];

outStream<< number[i];

}

inStream.open(nameWork);

inStream.fail();

if (outStream.fail()){

cout<<"Не удается открыть файл character.dat\n";

exit(1);

}

for(int i=0; i<4; i++){

inStream>>diskr[i];

cout<< diskr[i];

}

inStream.close();

outStream.close();

cin >>number[0];

}