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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gulllak
45 / 1 / 0
Регистрация: 09.10.2012
Сообщений: 66
#1

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

15.06.2013, 08:27. Просмотров 632. Ответов 11
Метки нет (Все метки)

Программа работает, но с дефектом. Суть такова: программа должна дописывать в конец текстового файла данные о сканерах. Но он как бы дописывает количество сканеров, но сами введенные записи (данные) не записываются и отображаются как непонятный набор цифр и букв вместо того что я вводил. Помогите, очень срочно нужно разобраться, сегодня нужно сдать.

Вот мой код:
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;
        };
    };
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2013, 08:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос До запись в текстовый файл (C++):

Запись в текстовый файл - C++
Создать текстовый файл и записать в него 6 строк. Записываемые строки вводятся с клавиатуры. Надо решить эту задачу в КЛАССАХ. ...

Запись в текстовый файл - C++
Здраствуйте. Нашёл небольшой кусочек кода в интеренете, который записывает текст в текстовый файл. Он работает. Вот код: #include...

Запись данных в текстовый файл - C++
Есть код программы: #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) { HANDLE hFile; char data =...

Чтение и запись из/в текстовый файл - C++
Здравствуйте, программисты! Помогите, пожалуйста, разобраться с чтением из файла. Есть код: #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; ...

Запись данных в текстовый файл - C++
Помогите решить задачу. Нужно создать что-то типа базы данных с записью в текстовый документ. Нужно вводить из клавиатуры марку машины и...

Запись данных в текстовый файл - C++
Здравствуйте , помогите пожалуйста , есть программа которая считает по формулам величину h (компилировал в Visual C++ 2008): ...

11
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 08:36 #2
Попробуйте использовать http://www.cplusplus.com/reference/fstream/ofstream/
0
gulllak
45 / 1 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 08:41  [ТС] #3
Цитата Сообщение от GetVariable Посмотреть сообщение
Попробуйте использовать http://www.cplusplus.com/reference/fstream/ofstream/
Я уже не знаю как исправить, всю ночь сижу...
0
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;
        };
    };
}
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.06.2013, 09:05 #5
Кскольки тебе?
0
gulllak
45 / 1 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:06  [ТС] #6
Цитата Сообщение от stawerfar Посмотреть сообщение
Кскольки тебе?
Сейчас пара через час(
0
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 09:07 #7
Цитата Сообщение от gulllak Посмотреть сообщение
Сейчас пара через час(
Выше скинул готовый вариант, протестируйте.
0
gulllak
45 / 1 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:10  [ТС] #8
Цитата Сообщение от GetVariable Посмотреть сообщение
Выше скинул готовый вариант, протестируйте.
При вводе количества дополнительных записей произошло крушение программы.
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.06.2013, 09:12 #9
Мужчины все работает я не понимаю в чем у вас трудности ввожу 6 записей и все данные закрываю вывожу в консоль все в поряде. Один вопрос вы чем компилите и какой проект создали? Да и где в Win или Linux?
Да я говорю о самом первом варианте который вы выложили и считали проблемным
0
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
15.06.2013, 09:16 #10
Цитата Сообщение от gulllak Посмотреть сообщение
При вводе количества дополнительных записей произошло крушение программы.
это уже ваша задача, моя задача - сделать вывод и дать для теста, остальную архитектуру будте добры доработать сами.
0
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>
0
Миниатюры
До запись в текстовый файл  
gulllak
45 / 1 / 0
Регистрация: 09.10.2012
Сообщений: 66
15.06.2013, 09:38  [ТС] #12
Проблема начинается при нажатии "добавить запись", например при добавлении 7 и 8 сканера. Он как бы добавляет их количество, но при повторном выводе списка, введенные данные про 7 и 8 сканер не отображаются так как ввел их я. А вместо этого какие то цифры и буквы!

Добавлено через 1 минуту
Проблема именно в дозаписи новых сканеров в файл.
0
15.06.2013, 09:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2013, 09:38
Привет! Вот еще темы с ответами:

Запись структуры в текстовый файл - C++
в программе написан код для записи данных в бинарный файл. как его переделать, чтобы записывало в текстовый? просто сменить .bin на .txt не...

Запись структуры в текстовый файл - C++
Необходимо в текстовый фаил вывести данные. Фаил создается, но как бы я не пробовал, в него ничего не записывается. В строках 94-100...

Запись значений в текстовый файл - C++
Здравствуйте, у меня вот такой вопрос. Можно ли записать, например, значение какой-нибудь переменной в текстовый файл. И чтобы при...

Запись матрицы в текстовый файл - C++
Нужна помощь! Программа должна создавать текстовый файл в который будет записана матрица. Все работает, но матрица записываеться в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru