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

До запись в текстовый файл - C++

Восстановить пароль Регистрация
 
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 08:27     До запись в текстовый файл #1
Программа работает, но с дефектом. Суть такова: программа должна дописывать в конец текстового файла данные о сканерах. Но он как бы дописывает количество сканеров, но сами введенные записи (данные) не записываются и отображаются как непонятный набор цифр и букв вместо того что я вводил. Помогите, очень срочно нужно разобраться, сегодня нужно сдать.

Вот мой код:
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
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
using namespace std;
 
struct scan_info {
    char model[25]; // наименование модели
    int price;  // цена
    double x_size;  // горизонтальный размер области сканирования
    double y_size; // вертикальный размер области сканирования
    int optr; // оптическое разрешение
    int grey; // число градаций серого
};
int ShowMenu();
void CreateFile(); 
void ViewFile();
void D();
 
int ShowMenu() {
    setlocale(0,"rus");
    char ch = '\0';
    cout << "1 : Создайте файл\n"; 
    cout << "2 : Просмотр файлов\n";
    cout << "3 : Добавить запись\n";
    cout << "4 : Выход\n";
    ch = getchar();     
    return atoi(&ch); // строка в целое число
}
 
void CreateFile() { 
    int n;
    FILE *data;
    char *db = "file.bin";
    data = fopen(db, "wb");
    do {
        cout << endl << "Введите количество записей (6-8): ";    
        cin >> n;
    }
    while((n < 6) || (n > 8));
    scan_info scan;
    fwrite(&n, sizeof(n), 1, data);
    for(int i = 1; i <= n; i++) {
        cout << "Сканер N: " << i << endl;
        cout << "Модель: "; 
        cin >> scan.model;
        cout << "Цена: "; 
        cin >> scan.price;
        cout << "Горизонтальная размер области сканирования: "; 
        cin >> scan.x_size;
        cout << "Вертикальный размер области сканирования: "; 
        cin >> scan.y_size;
        cout << "Оптическое разрешение: "; 
        cin >> scan.optr;
        cout << "Число градаций серого: "; 
        cin >> scan.grey;
        cout << endl;
        fwrite(&scan, sizeof(scan), 1, data);
    };
    fclose(data);  
    cout << "Файл  file.bin  создан." << endl << endl;
    
    FILE *data1;
    char *db1 = "file.txt";
    data1 = fopen(db1, "wt");
    data = fopen(db, "rb");
    fread(&n,sizeof(n),1,data);
    fwrite(&n, sizeof(n), 1, data1);
    scan_info* s = new scan_info[n];
    for(int g = 0; g < n; g++) 
        fread(&s[g],sizeof(scan_info),1,data);
    for(int g = 0; g < n; g++) 
        fwrite(&s[g], sizeof(scan_info), 1, data1);
    fclose(data); 
    fclose(data1);  
 
    getchar();
    return;
}
 
void ViewFile() {
    FILE *data1;
    char *db1 = "file.txt";
    data1 = fopen(db1, "rt");
    if( data1 == NULL ) {
        cout << "Нельзя открыть файл для чтения." << endl << endl;
        getchar();
        return;
    } ;
    int n;
    fread(&n,sizeof(n),1,data1);
    cout << endl << "Количество сканеров: " << n << endl << endl;
    scan_info* s = new scan_info[n];
    for(int g = 0; g < n; g++) 
        fread(&s[g],sizeof(scan_info),1,data1);
    for(int g = 0; g < n; g++) {
        cout << "Сканер N: " << g+1 << endl;
        cout << "Модель: " << s[g].model << endl;
        cout << "Цена: " << s[g].price << endl;
        cout << "Горизонтальный размер области сканирования: " << s[g].x_size << endl;
        cout << "Вертикальный размер области сканирования: " << s[g].y_size << endl;
        cout << "Оптическое разрешение: " << s[g].optr << endl;
        cout << "Число градаций серого: " << s[g].grey << endl;
        cout << endl;
    };
    fclose(data1);
    cout << endl << endl;
    getchar();
    return;
}
 
void D() {
    FILE *data1;
    char *db1 = "file.txt";
    data1 = fopen(db1, "wt");
    int k,n;
    do{
        cout << endl << "Введите количество дополнительных записей(2-3) ";    
        cin >> k;
    }
    while((k < 2) || (k > 3));
    FILE *data;
    char *db = "file.bin";
    data = fopen(db, "rb");
    fread(&n,sizeof(n),1,data);
    n=n+k;
    fwrite(&n, sizeof(n), 1, data1);
    scan_info* s = new scan_info[n];
    for(int g = 0; g < n; g++) 
        fread(&s[g],sizeof(scan_info),1,data);
    for(int g = 0; g < n; g++) 
        fwrite(&s[g], sizeof(scan_info), 1, data1);
    fclose(data);
    scan_info scan;
    for(int i = (n-k+1); i <= n; i++) {
        cout << "Сканер N: " << i<< endl;
        cout << "Модель: "; 
        cin >> scan.model;
        cout << "Цена: "; 
        cin >> scan.price;
        cout << "Горизонтальная размер области сканирования: "; 
        cin >> scan.x_size;
        cout << "Вертикальный размер области сканирования: "; 
        cin >> scan.y_size;
        cout << "Оптическое разрешение: "; 
        cin >> scan.optr;
        cout << "Число градаций серого: "; 
        cin >> scan.grey;
        cout << endl;
        fwrite(&scan, sizeof(scan), 1, data1);
    }  
    fclose(data1);
    data1 = fopen(db1, "rt");
    data = fopen(db, "wb");
    fread(&n,sizeof(n),1,data1);
    fwrite(&n, sizeof(n), 1, data);
    for(int g = 0; g < n; g++) 
        fread(&s[g],sizeof(scan_info),1,data1);
    for(int g = 0; g < n; g++) 
        fwrite(&s[g], sizeof(scan_info), 1, data);
    fclose(data); 
    fclose(data1);
    cout << "Записи добавлена." << endl << endl;
    getchar();
    return;
}
 
int main() {
    while (1) { 
        switch( ShowMenu() ) {  
        case 1: CreateFile(); break;
        case 2: ViewFile(); break; 
        case 3: D(); break;
        case 4: return 0; 
        default: break;
        };
    };
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2013, 08:27     До запись в текстовый файл
Посмотрите здесь:

C++ Запись в текстовый файл
Запись данных в текстовый файл C++
Неправильная запись в текстовый файл C++
C++ Запись значений в текстовый файл
C++ Запись данных в текстовый файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 08:36     До запись в текстовый файл #2
Попробуйте использовать http://www.cplusplus.com/reference/fstream/ofstream/
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 08:41  [ТС]     До запись в текстовый файл #3
Цитата Сообщение от GetVariable Посмотреть сообщение
Попробуйте использовать http://www.cplusplus.com/reference/fstream/ofstream/
Я уже не знаю как исправить, всю ночь сижу...
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 09:03     До запись в текстовый файл #4
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
#include <fstream>
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
 
using namespace std;
 
struct scan_info {
    char model[25]; // наименование модели
    int price;  // цена
    double x_size;  // горизонтальный размер области сканирования
    double y_size; // вертикальный размер области сканирования
    int optr; // оптическое разрешение
    int grey; // число градаций серого
};
int ShowMenu();
void CreateFile();
void ViewFile();
void D();
 
int ShowMenu() {
    setlocale(0,"rus");
    char ch = '\0';
    cout << "1 : Создайте файл\n";
    cout << "2 : Просмотр файлов\n";
    cout << "3 : Добавить запись\n";
    cout << "4 : Выход\n";
    ch = getchar();
    return atoi(&ch); // строка в целое число
}
 
void CreateFile() {
    int n;
    FILE *data;
    char *db = "file.bin";
    data = fopen(db, "wb");
    do {
        cout << endl << "Введите количество записей (6-8): ";
        cin >> n;
    }
    while((n < 6) || (n > 8));
    scan_info scan;
    fwrite(&n, sizeof(n), 1, data);
    for(int i = 1; i <= n; i++) {
        cout << "Сканер N: " << i << endl;
        cout << "Модель: ";
        cin >> scan.model;
        cout << "Цена: ";
        cin >> scan.price;
        cout << "Горизонтальная размер области сканирования: ";
        cin >> scan.x_size;
        cout << "Вертикальный размер области сканирования: ";
        cin >> scan.y_size;
        cout << "Оптическое разрешение: ";
        cin >> scan.optr;
        cout << "Число градаций серого: ";
        cin >> scan.grey;
        cout << endl;
        fwrite(&scan, sizeof(scan), 1, data);
    };
    fclose(data);
    cout << "Файл  file.bin  создан." << endl << endl;
 
    FILE *data1;
    char *db1 = "file.txt";
    data1 = fopen(db1, "wt");
    data = fopen(db, "rb");
    fread(&n,sizeof(n),1,data);
    fwrite(&n, sizeof(n), 1, data1);
    scan_info* s = new scan_info[n];
    for(int g = 0; g < n; g++)
        fread(&s[g],sizeof(scan_info),1,data);
    for(int g = 0; g < n; g++)
        fwrite(&s[g], sizeof(scan_info), 1, data1);
    fclose(data);
    fclose(data1);
 
    getchar();
    return;
}
 
void ViewFile() {
    FILE *data1;
    char *db1 = "file.txt";
    data1 = fopen(db1, "rt");
    if( data1 == NULL ) {
        cout << "Нельзя открыть файл для чтения." << endl << endl;
        getchar();
        return;
    } ;
    int n;
    fread(&n,sizeof(n),1,data1);
    cout << endl << "Количество сканеров: " << n << endl << endl;
    scan_info* s = new scan_info[n];
    for(int g = 0; g < n; g++)
        fread(&s[g],sizeof(scan_info),1,data1);
    for(int g = 0; g < n; g++) {
        cout << "Сканер N: " << g+1 << endl;
        cout << "Модель: " << s[g].model << endl;
        cout << "Цена: " << s[g].price << endl;
        cout << "Горизонтальный размер области сканирования: " << s[g].x_size << endl;
        cout << "Вертикальный размер области сканирования: " << s[g].y_size << endl;
        cout << "Оптическое разрешение: " << s[g].optr << endl;
        cout << "Число градаций серого: " << s[g].grey << endl;
        cout << endl;
    };
    fclose(data1);
    cout << endl << endl;
    getchar();
    return;
}
 
void D() {
    ofstream file("text.txt", ios::app);
 
    int k,n;
    scan_info Scan;
 
    do{
        cout << endl << "Введите количество дополнительных записей(2-3) ";
        cin >> k;
    }
    while((k < 2) || (k > 3));
    for(int i = (n-k+1); i <= n; i++) {
        cout << "Сканер N: " << i<< endl;
        cout << "Модель: ";
        cin >> Scan.model;
        cout << "Цена: ";
        cin >> Scan.price;
        cout << "Горизонтальная размер области сканирования: ";
        cin >> Scan.x_size;
        cout << "Вертикальный размер области сканирования: ";
        cin >> Scan.y_size;
        cout << "Оптическое разрешение: ";
        cin >> Scan.optr;
        cout << "Число градаций серого: ";
        cin >> Scan.grey;
        cout << endl;
 
        file << Scan.model;
        file << Scan.price;
        file << Scan.x_size;
        file << Scan.y_size;
        file << Scan.optr;
        file << Scan.grey;
        
 
    }
 
    cout << "Записи добавлена." << endl << endl;
    getchar();
    return;
}
 
int main() {
    while (1) {
        switch( ShowMenu() ) {
        case 1: CreateFile(); break;
        case 2: ViewFile(); break;
        case 3: D(); break;
        case 4: return 0;
        default: break;
        };
    };
}
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.06.2013, 09:05     До запись в текстовый файл #5
Кскольки тебе?
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:06  [ТС]     До запись в текстовый файл #6
Цитата Сообщение от stawerfar Посмотреть сообщение
Кскольки тебе?
Сейчас пара через час(
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 09:07     До запись в текстовый файл #7
Цитата Сообщение от gulllak Посмотреть сообщение
Сейчас пара через час(
Выше скинул готовый вариант, протестируйте.
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:10  [ТС]     До запись в текстовый файл #8
Цитата Сообщение от GetVariable Посмотреть сообщение
Выше скинул готовый вариант, протестируйте.
При вводе количества дополнительных записей произошло крушение программы.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.06.2013, 09:12     До запись в текстовый файл #9
Мужчины все работает я не понимаю в чем у вас трудности ввожу 6 записей и все данные закрываю вывожу в консоль все в поряде. Один вопрос вы чем компилите и какой проект создали? Да и где в Win или Linux?
Да я говорю о самом первом варианте который вы выложили и считали проблемным
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 09:16     До запись в текстовый файл #10
Цитата Сообщение от gulllak Посмотреть сообщение
При вводе количества дополнительных записей произошло крушение программы.
это уже ваша задача, моя задача - сделать вывод и дать для теста, остальную архитектуру будте добры доработать сами.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.06.2013, 09:21     До запись в текстовый файл #11
Я еще раз повторяюсь. gulllak что за кипешь вот мой скрин вывода уже после создания файла. Все работает. Я создал консольное приложение. Компилировал VC в Win естественно. Немного изменил первые четыре строчки на
C++
1
2
3
4
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
Миниатюры
До запись в текстовый файл  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2013, 09:38     До запись в текстовый файл
Еще ссылки по теме:

запись в созданный текстовый файл C++
Чтение и запись из/в текстовый файл C++
C++ Запись в текстовый файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:38  [ТС]     До запись в текстовый файл #12
Проблема начинается при нажатии "добавить запись", например при добавлении 7 и 8 сканера. Он как бы добавляет их количество, но при повторном выводе списка, введенные данные про 7 и 8 сканер не отображаются так как ввел их я. А вместо этого какие то цифры и буквы!

Добавлено через 1 минуту
Проблема именно в дозаписи новых сканеров в файл.
Yandex
Объявления
15.06.2013, 09:38     До запись в текстовый файл
Ответ Создать тему
Опции темы

Текущее время: 00:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru