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

Чтение из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Использование функций записи в файл http://www.cyberforum.ru/cpp-beginners/thread308425.html
Здравствуйте! Есть глобальная переменная int date_year int date_Month; Надо дозаписать в файл, данные этих двоих переменных, полученных через cin, под шапкой таблицы в одну строку. void Cap_table() { ofstream f("reminder.txt"); f << "---------------------------------------------------------" << endl; f << "| Date | Executive | My plan |" << endl; f...
C++ Конструкторы, Деструкторы. вывод на экран Здравствуйте уважаемые форумчане! Из книги взял пример кода по конструкторам. Вот код: #include <cstdlib> #include <iostream> class MyClass { public: int x; http://www.cyberforum.ru/cpp-beginners/thread308423.html
Программирование на С C++
если это важно работаем с программой Borland ++++++++++++++++++++++ 1. Дайте определение строки. Чем строка отличается от символьного массива? Приведите пример. 2. Какие значения будут выведены в результате работы программы? void main() {float m={{2,4,6,8},{1,3,5,7},{9,10,11,12}} ,*d=m; printf("%d %d %d\n", sizeof(d), sizeof(m), sizeof(m));}
C++ Ввод из файла.
дана программа. в ней нужно ввести данные из файла. при выводе их на экран выводит не той кодировкой. помогите поменять. вот код программы: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <iostream.h> #include <stdio.h> #include <conio.h> #include <string.h>
C++ Структуры http://www.cyberforum.ru/cpp-beginners/thread308413.html
В библиотеке создается база данных, в которой хранятся сведения об имеющихся в библиотеке книгах. Эта база данных представляет собой файл структур следующего вида: struct books { char наименование_книги; char автор ; char редактор ; char издательство ; int год_издани
C++ Файлы Подскажите пожалуйста! В магазине имеются различные товары, причем каждому товару в качестве названия присвоен целочисленный код. Для контроля за наличием товара создаетс ЛИТЕРНЫЙ файл, состоящий из записей, описывающих товары - по одной записи на каждый товар. Запись имеет следующий вид (второй солбец - форматные спецификации строки с форматами преобразований типов - второй параметр функции... подробнее

Показать сообщение отдельно
Kravch
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 7

Чтение из файла - C++

30.05.2011, 16:41. Просмотров 945. Ответов 12
Метки (Все метки)

Есть текстовый файл, с n строк. Нужно записать содержимое каждой строки в массив char table[n][6]. Длина каждой строки известна и одинакова, так же известно количество строк. Написал функцию, но есть проблема с переходом на новую строку файла, из-за этого происходит неправильная запись в массив. Была мысль записать весь файл в string, а оттуда записывать в массив, но это как-то не рационально.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void read() {
    int IndexSeg, i;
    char c[6];
 
    IndexSeg = 0;
    
    FILE * pFile;
    pFile = fopen ("1.txt","r");
    while (IndexSeg != HashSize) {
        fgets (c, 6, pFile);
        if(c[0] == empty) {
            table[IndexSeg][0] = empty;
        }
        else {
            for(i = 0; i < 6; i++) {
                table[IndexSeg][i] = c[i];
            }
        }
        IndexSeg++;
    }
    fclose (pFile);
}
Код всей программы. На всякий случай ;-)

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
 
const int HashSize = 10;
const char empty = 'E'; 
const char deleted = 'D'; 
const int c = 1; // Шаг перебора
const int MaxCase = 2; // Максимальное количество попыток
 
char table[10][6]; // Хеш
 
void hash_clean();
int hash_search(char x[]);
bool add_element(char x[]);
int hash1(char key[]);
int hash2(char key[]);
void read();
void del(char x[]);
int menu();
 
int main() {
 
    setlocale(LC_ALL, "rus");
 
    return menu();
}
 
// Меню
int menu() {
 
    int i, c = 0;
    char x[6];
 
    while(1) {
        cout << "\n";
            cout << "1. Добавить элемент в таблицу \n";
            cout << "2. Найти элемент в таблице \n";
            cout << "3. Удалить элемент из таблицы \n";
            cout << "4. Очистить таблицу \n\n";
            cout << "5. Выйти \n\n";
            cout << "Выберите команду: ";
            cin >> c;
        
        switch(c) {
            case 1: 
                cout << "Введите ключ вида цццАцц : ";
                for(i = 0; i < 6; i++) {
                    cin >> x[i];
                }
                
                read();
                add_element(x);
                cout << "\n\nЭлемент добавлен" << endl;
                break;
 
            case 2: 
                cout << "Введите ключ вида цццАцц : ";
                for(i = 0; i < 6; i++) {
                    cin >> x[i];
                }
                
                read();
                c = hash_search(x);
                cout << "\n\nНайденный элемент : " << table[c] << endl;
                break;
 
            case 3: 
                cout << "Введите ключ вида цццАцц : ";
                for(i = 0; i < 6; i++) {
                    cin >> x[i];
                }
                
                read();
                del(x);
                cout << "\n\nЭлемент удалён" << endl;
                break;
 
            case '\n':
                break;
 
            case 4: 
                cout << "\n\nВы уверены что хотите очистить хеш? (Введите 42 если да)" << endl;
                cin >> c;
 
                if(c == 42)
                    hash_clean();
                break;
 
            case 5: 
                system("pause");
                return 0;
        }
    }
}
 
// Очищаем хеш.
void hash_clean() {
    int IndexSeg;
 
    for(IndexSeg = 0; IndexSeg < HashSize; IndexSeg ++) {
        table[IndexSeg][0] = empty;
    }
}
 
// Функция поиска элемента х в хеш-таблице. 
// Возвращаем номер элемента, если найден и -1, если не найден.
int hash_search(char x[]) {
    int IndexSeg, i, h1, h2;
    
    i = 0;
    h1 = hash1(x);
    h2 = hash2(x);
    
    do {
        IndexSeg = (((h1 + i * h2) % HashSize + (h1 + i * h2) / 2) % HashSize);
        i++;
    } while((table[IndexSeg][0] == x[0] && table[IndexSeg][1] == x[1] && table[IndexSeg][2] == x[2] && table[IndexSeg][3] == x[3] && table[IndexSeg][4] == x[4] && table[IndexSeg][5] == x[5]) || table[IndexSeg][0] != empty || i > MaxCase);
 
    if (table[IndexSeg][0] == x[0] && table[IndexSeg][1] == x[1] && table[IndexSeg][2] == x[2] && table[IndexSeg][3] == x[3] && table[IndexSeg][4] == x[4] && table[IndexSeg][5] == x[5]) {
        return(IndexSeg); // Нашли. Возвращаем номер найденного.
    }
    else 
        return -1; // Не нашли. Возвращаем -1.
}
 
// Функция добавления элемента в таблицу.
bool add_element(char x[]) {
    int i, h1, h2;
    int IndexSeg;
 
    i = 0;
    h1 = hash1(x);
    h2 = hash2(x);
 
    if(hash_search(x) < 0) {
        do {
            IndexSeg = (((h1 + i * h2) % HashSize + (h1 + i * h2) / 2) % HashSize;
            i++;
        } while(table[IndexSeg][0] != empty || table[IndexSeg][0] == deleted || i > MaxCase);
 
        if(table[IndexSeg][0] == empty || table[IndexSeg][0] == deleted) {
            table[IndexSeg][0] = x[0];
            table[IndexSeg][1] = x[1];
            table[IndexSeg][2] = x[2];
            table[IndexSeg][3] = x[3];
            table[IndexSeg][4] = x[4];
            table[IndexSeg][5] = x[5];
            FILE * pFile;
            pFile = fopen ("1.txt","w");
            for(IndexSeg = 0; IndexSeg < HashSize; IndexSeg++) {
                for(i = 0; i < 6; i++) {
                    fprintf(pFile, "%c", table[IndexSeg][i]);
                }
                fprintf(pFile, "\n");
 
            }
 
            fclose (pFile);
 
            cout << "All Ok" << endl; 
            return true;
        }
    }
    cout << "False" << endl;
    return false;
}
 
// Функция удаления элемента из таблицы
void del(char x[]) {
    int IndexSeg;
    IndexSeg = hash_search(x);
 
    if(IndexSeg != -1)
        table[IndexSeg][0] = deleted;
}
 
// Функция для считывания содержимого хеша из файла
void read() {
    int IndexSeg, i;
    char c[6];
    char * buffer;
 
    IndexSeg = 0;
    
    FILE * pFile;
    pFile = fopen ("1.txt","r");
    while (IndexSeg != HashSize) {
        fgets (c, 6, pFile);
        if(c[0] == empty) {
            table[IndexSeg][0] = empty;
        }
        else {
            for(i = 0; i < 6; i++) {
                table[IndexSeg][i] = c[i];
            }
        }
        IndexSeg++;
    }
    fclose (pFile);
}
 
// Вычисляем хеш-функцию первым способом
int hash1(char key[]) {
    int ascii[6];
    int i, h;
 
    for(i = 0; i < 6; i++) {
        ascii[i] = key[i];
    }
 
    h = ((ascii[0] + 3*ascii[1] + 9*ascii[2] + 27*ascii[3] + 81*ascii[4] + 243*ascii[5])) ;
 
    h = h%HashSize;
 
    return(h);
}
 
// Вычисляем хеш-функцию вторым способом
int hash2(char key[]) {
    int ascii[6];
    int i, h;
 
    for(i = 0; i < 6; i++) {
        ascii[i] = key[i];
    }
 
    h = ((ascii[0] + 3*ascii[1] + 9*ascii[2] + 27*ascii[3] + 81*ascii[4] + 243*ascii[5]))/2 ;
 
    h = h%HashSize;
 
    return(h);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru