Форум программистов, компьютерный форум CyberForum.ru

Буферизованный ввод в файл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сложить два числа в двоичной системе счисления в прямом коде http://www.cyberforum.ru/cpp-beginners/thread128799.html
Здравствуйте! Помогите, пожалуйста, решить задачу. Сложить два числа в двоичной системе счисления в прямом коде. Если можно, напишите всю программу. Заранее благодарна.
C++ сформировать двумерный массив сформировать двумерный массив по такому правилу 12345 51234 45123 34512 23451 http://www.cyberforum.ru/cpp-beginners/thread128798.html
Памогите прошу на С прогу C++
Памогите написать кусок проги по єтомуу заданию : - создание файла, содержащего записи обрабатываемого архива (массива записей); - добавление записей в архив; - удаление записей из архива;
Сформировать из данной строки новую строку, удалив все кратные символы C++
написать программу на си: дана строка АААВВСС, сформировать из нее новую строку АВС,удалив все кратные элементы. заранее спасибо)
C++ Перевести число из десятичной системы в двоичную http://www.cyberforum.ru/cpp-beginners/thread128786.html
Здравствуйте! Помогите, пожалуйста, решить задачу на С++. Перевести число из десятичной системы в двоичную. Если можно, напишите, пожалуйста, всю программу. Заранее благодарна.
C++ Удаление элемента из массива Задача на С++ Есть массив, который задается вводом. Есть ключ поиска, по которому соответственно идет удаление массива. Пример: исходный массив: 1 2 1 3 4 1 ключ поиска: 1 Полученный массив: 2 3 4 подробнее

Показать сообщение отдельно
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69

Буферизованный ввод в файл - C++

12.05.2010, 20:17. Просмотров 922. Ответов 4
Метки (Все метки)

Доброго времени суток.
Нужна помощь с программой, для начала что она делает и в чём "соль":
1) создаёт файл на жд с именем ...
C++
1
const char * file_name = "information.txt"; //имя файла
конечно имя файла может быть любым но это так, хочу услышать замечание по этому поводу.
2) далее, мы должны ввести количество учеников в классе (глобально для этого я создал шаблон структуры)
3) отступление: я вырезал из программы "лишние" функции, оставил только проблемные (их 3)
4) ввод в файл структур должен быть буферизирован, я его "кидаю пачками" по 5
C++
1
#define F_buf 5 //файловый буфер
Итак, я смотрю делится ли
C++
1
cin >> sum; //ввод
нацело на 5, если да, то вызываю функцию create_db_ch, если нет то create_db_ch и create_db_not_ch, допустим ввели sum(16), первая функция в цикле заполнит первую партию по 5, кинет в файл, потом ещё раз 5 и ещё раз, итого 3, вызовется вторая функция и заполнит в цикле структуру 1 раз. Как-то так.
п.с. код длинный, надо бы сократить и доработать функции, может даже сделать это в одной функции Create_db, но я не знаю как. Кто, чем может прошу помочь...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//----------------------------------------
#include "stdafx.h" //шаблон MVS
#include <iostream> //можно явно не включать
#include <fstream> //подключение заголовочного файла fstream, для работы с файлами I/O
#include <stdio.h> //STD I/O
#include <conio.h> 
using namespace std; //подключение пространства имён std
//----------------------------------------
#define def_file "MENU\n1. Create database\n2. Exit\nEnter item of the menu: " //меню 1
#define def_menu "MENU\n1. Create database\n2. View database\n3. Edit information\n4. Search information\n5. Remove database\n6. Exit\nEnter item of the menu: " //меню 2
 
#define F_buf 5 //файловый буфер
//----------------------------------------
typedef struct //объявление структуры, пользовательский тип
{ //список типов данных
    char family[15]; //фамилия; оператор объявления
    unsigned short school_class; //класс
    char year_of_birth[5]; //год рождения ученика
} type_information; // ; - завершает объявление шаблона
const char * file_name = "information.txt"; //имя файла
//----------------------------------------
//прототипы функций
int Create_db(FILE *); //создание
 
int View_db(FILE *); //просмотр
 
 
int create_db_ch(FILE *, unsigned int); //буфер "чётности"
int create_db_not_ch(FILE * f, unsigned int); //допольнительный буфер
//----------------------------------------
int main() //главная функция, возвращает 0 при успехе
{
    FILE * f; //объявление указателя на файл (f)
    unsigned short choice; //переменная "выбора"
    while(true) //условие работы опереатора switch (циклически)
    {
        system("CLS"); //очистка консоли, экрана
        if ( 0 == (f=fopen(file_name, "r")) )  //проверка на существование файла
        {       
            cout << def_file; //описание смотри в макроопределиниях (выше)      
            cin >> choice;
                switch(choice)
                {
                    case 1 : Create_db(f); break; //create db
                    case 2 : exit(1); //выход из программы
                    default : cout << "\nWatch the pressed keys!\n> ";          
                }
        }   
        else //файл уже есть!
        {
            fclose(f);
            cout << def_menu; //описание смотри в макроопределениях (выше)
            cin >> choice;
            switch(choice)
            {
                
                case 2 : View_db(f); break;
                
                case 5 : remove(file_name); break; //удаление файла
                case 6 : exit(1); //выход из программы
                default : cout << "\nWatch the pressed keys!\n> "; 
            }       
        }
    }   
    return 0;
}
//----------------------------------------
int create_db_ch(FILE * f, unsigned int a)
{
    f=fopen(file_name, "w"); //создание нового файла
    type_information * p = new type_information[F_buf]; //выделение памяти под динамический массив
    for (unsigned int i=0; i<a; i++)
    {
        cout << "\nInput structure.\nInput family: ";
        gets((p+i)->family);
        cout << "Input school class (format-number : x) : ";
        cin >> (p+i)->school_class;
        cout << "Input year of birth (format-number : xxxx) : ";
        gets((p+i)->year_of_birth);
    } 
    fwrite(p, sizeof(type_information), F_buf, f);
    delete [] p; //освобождение памяти
    fclose(f); //закрытие файла
    return 0;
}
//----------------------------------------
int create_db_not_ch(FILE * f, unsigned int b)
{
    f=fopen(file_name, "a"); //открытие на дозапись
    type_information * p = new type_information[b]; //2 выделение памяти под динамический массив
    for (unsigned int i=0; i<b; i++)
    {
        cout << "\nInput structure.\nInput family: ";
        gets((p+i)->family);
        cout << "Input school class (format-number : x) : ";
        cin >> (p+i)->school_class;
        cout << "Input year of birth (format-number : xxxx) : ";
        gets((p+i)->year_of_birth);
    } 
    fwrite(p, sizeof(type_information), b, f);
    delete [] p; //освобождение памяти
    fclose(f); //закрытие файла
    return 0;
}
//----------------------------------------
 
int Create_db(FILE * f) //создание ДБ (буферизировано)
{
    system("CLS"); //очистка экрана
    unsigned int sum; //количество записей
    cout << "Enter the number of records : ";
    cin >> sum; //ввод
    if (0 == (sum%F_buf)) create_db_ch(f, sum/F_buf);
    else { 
        create_db_ch(f, (sum-(sum%F_buf))/F_buf); 
        create_db_not_ch(f, sum%F_buf); 
        }
    cout << "\nSuccessfull!";
    _getch();
    return 0;
}
//----------------------------------------
int View_db(FILE * f) //вывод на экран
{
    system("CLS"); //CLS
    type_information struct_ofschool;
    f=fopen(file_name, "r"); //отрытие на чтение
    cout << "       Surname" << " Class" << " Old\n";
    while(fread(&struct_ofschool, sizeof struct_ofschool, 1, f))
    {
        printf("%14s %1d %8s\n", struct_ofschool.family, struct_ofschool.school_class, struct_ofschool.year_of_birth);
    }
    fclose(f);
    cout << "done!";
    _getch();
    return 0;
}
//----------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru