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

Робота з бінарним файлом

Читайте также:
  1. Батогами. Одначе робота ця забрала не всі її думки: дівчина стиха
  2. Бесіда про Україну. Робота з картою.
  3. Гідравлічна система. Робота насоса на гідравлічну мережу
  4. І. Робота з поштою
  5. ІНДИВІДУАЛЬНА РОБОТА
  6. Лабораторна робота 10
  7. Лабораторна робота 11

Такі файли, на відміну від потокових, створюються в певній логічній структурі і тому повинні читатися в змінну тієї ж структури. Приклад програми приведений в лістингу 13.

лістинг 13

# include <vcl.h>

# include <iostream> / / для cin, cout

# include <fstream>

# include <conio.h>

# include <stdio.h>

void main ()

{

using namespace std; // використовується стандартне простір імен

/* Дані про співробітників */

struct Blocknotes

{

char name [30];

char phone [15];

int age;

} B [2] =

{

"

}; // Ініціалізація масиву структур

// Запис даних в файл

ofstream FILE;

FILE.open ("Block", ios:: binary);

for (int i = 0; i <2; i++)

FILE.write ((char *) & b [i], sizeof (b [i]));

FILE.close ();

// Читання даних з файлу

ifstream FILE1;

FILE1.open ("Block", ios:: binary);

Blocknotes bb [2];

int i = 0;

while (! FILE1.eof ())

{

if (i == 2)

goto m;

FILE1.read ((char *) & bb [i], sizeof (bb [i]));

cout << "string" << i << "" << bb [i]. name << ""

<< Bb [i]. Phone << "" << bb [i]. Age << endl;

i++;

}

m:

FILE1.close ();

system ("DEL BLOCK");

getch ();

}

Пояснень потребують такі моменти:

- для запису

FILE.write((char *)&b[i], sizeof(b[i]));

використовується функція буферізірованний виведення write (), в якій першим аргументом є вказівник на структуру, з якої ми повинні записувати дані. Цей вказівник дорівнює адресою структури, тобто & b [i]. Але в потоці всі дані зберігаються побайтно, тому тип вказівника char (тут йде примусове перетворення типу). Другий аргумент - довжина запису. Вона визначається стандартною функцією sizeof ();

- за допомогою функції system ("DEL BLOCK") вилучається робочий файл;

- оператор goto застосований для підстраховки від перевищення індексу масиву bb [].

Результат роботи програми наведений на рис. 3.

 

Рис. 3. Результат роботи програми лістингу 13

Стандартне введення/виведення в С++

Загальні положеняя

Стандартне введення/виведення є окремим випадком файлового введення/виведення. При файловому введенні/виведенні ми оголошували екземпляри відповідних поточних класів і потім користувалися методами і операціями << і >>. Але як ми бачили на початку цієї лекції, класи istream, ostream, що лежать в основі потокових класів, містять стандартні об'єкти-екземпляри класів з іменами cout (екземпляр класу для стандартного введення), cin (екземпляр класу для стандартного виведення) і сerr (екземпляр класу для стандартного виводу повідомлень про помилки). При запуску будь-якої програми на мові С++ ці стандартні потоки визначені (відкриті) і за замовчуванням призначені на стандартне ввідний пристрій - клавіатуру (cin), на стандартне вивідний пристрій - екран (cout і cerr). Причому всі ці пристрої синхронно пов'язані з відповідними вказівниками stdin, stdout, stderr. Так що робота зі стандартним введенням/виведенням зводиться до того, що замість імен примірників відповідних класів, що задаються користувачем, задаються імена стандартних екземплярів класів: cin, cout. Відкривати нічого не потрібно, треба тільки використовувати операції <<, >> і операції форматування. Якщо ми пишемо імена змінних, з яких виводяться або в які вводяться дані, то за замовчуванням для введення/виведення використовуються певні формати. Наприклад, запишемо:

cout << i;

У цьому випадку значення i виведеться на екран у форматі, визначеному за замовчуванням для типу i в мінімальному поле.

Запишемо:

cin >> i >> j >> s;

де i, j, s описані відповідно як int, float, char. У записі ми не бачимо форматів, але при введенні значень цих змінних з клавіатури (після введення кожного значення треба натискати клавішу <Enter>) їх формати будуть враховані.


Дата добавления: 2015-07-10; просмотров: 120 | Нарушение авторских прав


Читайте в этой же книге: Анализ проявлений различных форм агрессивности у подростков 10-15 лет | Анализ проявлений различных форм агрессивности у подростков из семей учителей, врачей, инженеров | Опросник уровня агрессивности Басса - Дарки | Опросник | Введення/виведення файлів | Функції для роботи з файлами | Приклад зі списком роззсилки | Функції стандартного введення/виведення | Лістинг 5 | Загальні положення |
<== предыдущая страница | следующая страница ==>
Робота з класом ifstream| Стандартне виведення cout

mybiblioteka.su - 2015-2024 год. (0.007 сек.)