Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ввод вывод данных.Стандартные потоки,файловые потоки.






Целые, вещественные типы данных.Операции над ними.Диапозоны значений.Совместимость указанных типов.

В С++ имеется набор встроенных типов данных для представления целых и вещественных чисел, символов, а также тип данных “символьный массив”, который служит для хранения символьных строк. Тип char служит для хранения отдельных символов и небольших целых чисел. Он занимает один машинный байт. Типы short, int и long предназначены для представления целых чисел. Эти типы различаются только диапазоном значений, которые могут принимать числа, а конкретные размеры перечисленных типов зависят от реализации. Обычно short занимает половину машинного слова, int – одно слово, long – одно или два слова. В 32-битных системах int и long, как правило, одного размера.

Типы float, double и long double предназначены для чисел с плавающей точкой и различаются точностью представления (количеством значащих разрядов) и диапазоном. Обычно float (одинарная точность) занимает одно машинное слово, double (двойная точность) – два, а long double (расширенная точность) – три.

char, short, int и long вместе составляют целые типы, которые, в свою очередь, могут быть знаковыми (signed) и беззнаковыми (unsigned). В знаковых типах самый левый бит служит для хранения знака (0 – плюс, 1 – минус), а оставшиеся биты содержат значение. В беззнаковых типах все биты используются для значения. 8-битовый тип signed char может представлять значения от -128 до 127, а unsigned char – от 0 до 255.

Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 – тип double.

В целом типе над ограниченным множеством математически целых чисел выполняются операции +, -, *, /, div, mod, где div — операция деления нацело (ее результат — целая часть обычного частного), mod — операция взятия остатка от деления. Только результат операции / имеет вещественный тип, результаты прочих — целого типа. Возведение в целую степень выполняют через умножения.

Над данными вещественного типа допустимы операции + (сложение), – (вычитание), * (умножение), / (деление).

Порядок приоритета:

Not;

Div, mod, and, shl, shr(сдвиг);

Xor, or;

4. =, < >, <, >, < =, > =, in.

Ввод вывод данных.Стандартные потоки, файловые потоки.

istream — класс входных потоков;

ostream — класс выходных потоков;

iostream — класс двунаправленных потоков ввода-вывода;

Библиотека обслуживает стандартные потоки путем определения в заголовочном файле iostream.h четырех специальных объектов:

cin — объект класса istream, связанный со стандартным буферизованным входным потоком (обычно — клавиатура кон­соли); использует операцию(> >)

cout — объект класса ostream, связанный со стандартным буферизованным выходным потоком (обычно — дисплей кон­соли); (< <)

Включаемый файл:

#include< fstream>

Файловые потоки реализованы следующими классами:

// файловые потоки ввода

typedef basic_ifstream< char> ifstream;

typedef basic_ifstream< wchar_t> wifstream;

// файловые потоки вывода

typedef basic_ofstream< char> ofstream;

typedef basic_ofstream< wchar_t> wofstream;

// файловые потоки ввода/вывода

// наследники от предыдущих

typedef basic_fstream< char> fstream;

typedef basic_fstream< wchar_t> wfstream;

методы файловых потоков

close() - закрывает файл;

open(const char* s, ios_base:: openmode n, long protection = 0666) - открывает файл;

bool is_open() - определяет открыт ли файл.

Конструктор файлового потока может заменить метод open. Значения режима открытия файла задаются вложенным типом open_mode:

 

typedef int openmode; // режим открытия потока

enum open_mode {

app = 0x01, // всегда писать в конец файла

binary = 0x02, // ввод/вывод в двоичном режиме

in = 0x04, // открыть для ввода

out = 0x08, // открыть для вывода

trunc = 0x10, // уничтожить данные после открытия существующего потока

ate = 0x20 // открыть позиционируя указатель на конец файла

};

текстовой и двоичный режим

В двоичном режиме при операциях ввода/вывода особые символы не заменяются (типа конца строки), что позволяет правильно обработать двоичные файлы (например, файлы *.bmp). При этом для чтения данных используется метод read, а для записи метод write.

По умолчанию потоки открываются в текстовом режиме и в зависимости от типа потока для ввода, вывода или ввода/вывода. Так в вызове ofstream fout(" out.txt", ios_base:: out|ios_base:: app); ios_base:: out| можно опустить.

пример

// чтение элемента с текущей позиции потока

template< class T>

inline void read_el(ifstream& fin, T el)

{fin.read((char*)& el, sizeof(el)); }

// запись элемента в текущую позицию потока

template< class T>

inline void write_el(ofstream& fout, T el)

{fout.write((const char*)& el), sizeof(el)); }

//===========================================

/****************************

Вводим имя файла, затем

выводим его размер.

Для завершения необходимо ввести

некорректное имя файла.

****************************/

#include < iostream>

#include < fstream>

using namespace std;

int main(){char buf[100]; ifstream fin;

cout < < " for close program input incorrect file name\\n";

while(1){

cout< < " input file name: "; cin> > buf;

fin.open(buf, ios_base:: binary);

if(! fin.is_open()) {cout< < " file not exist"; break;

} fin.seekg(0, ios_base:: end);

cout< < " file size is " < < fin.tellg() < < " bytes" < < endl;

fin.close();

}return 0; }






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.