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

Мусор в файлах - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 10:23     Мусор в файлах #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
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
 
 struct time_s
{
   int min;
   int sec;
};
 
 struct athlete
{
   char name [20];
   char f_name [20];
   int age;
   time_s time;
};
 
void process(athlete* &all, int count, char *f1_name, char *f2_name);
 
 void main()
{
   athlete *all = NULL;
   char f1_name[20], f2_name[20];
   int count, min;
   count = min = 0;
   clrscr();
   cout << "Введите имя файла F1: ";
   cin >> f1_name;
   cout << "Введите имя файла F2 (бинарный): ";
   cin >> f2_name;
   cout << "Введите количество спортсменов: ";
   cin >> count;
   process(all, count, f1_name, f2_name);
   getch();
}
 
 void process(athlete* &all, int count, char *f1_name, char *f2_name)
{
   int i, n, min = 0;
   all = new athlete[count];
   fstream f1(f1_name, ios::in | ios::out);
   if (f1.fail())
     {
       cout << "F1 Ошибка!" << f1.rdstate() << endl;
     }
   fstream f2(f2_name, ios::in | ios::binary | ios::out);
   if (f2.fail())
     {
       cout << "F2 Ошибка!" << f2.rdstate() << endl;
     }
   cout << "Введите данные о спортсменах\n"
         "(имя, фамилия, возраст, результат в мин. и сек. через пробел):\n";
   for (i = 0; i < count; ++i)
     {
        cout << i + 1 << ". ";
        cin >> all[i].name;
        cin >> all[i].f_name;
        cin >> all[i].age;
        cin >> all[i].time.min;
        cin >> all[i].time.sec;
     }
  
   f1 << "\nПроверка считывания из F2: \n";
   f2.seekg(0,ios::beg);
   for(i=0; i<n; i++)
   f2.write((char *)&all[i], size_d);
   f2.seekp(0, ios::beg);
   for(i=0;i<n;i++)
     {
       f2.read((char *)&all[i], size_d);
       f1 << all[i].name << " ";  
       f1 << all[i].f_name << " ";
       f1 << all[i].age << " ";
       f1 << all[i].time.min << " ";
       f1 << all[i].time.sec << " " << endl;
     }
   for (int k = 0; k < count; k++)
   if (k == 0) min = k;
   else if (all[k].age < all[min].age) min = k;
         cout << "\nСамый юный участник:\n";
         cout << "Порядковый номер в реестре: " << min 
                << "\nИмя: " << all[min - 1].name 
                << "\nФамилия: " << all[min - 1].f_name
                << "\nВозраст: " << all[min - 1].age 
                << "\nРезультат: " << all[min - 1].time.min 
                << " мин. " << all[min - 1].time.sec << " сек. ";
 
   ofstream file("F2.bin", ios::out | ios::binary);
   file.write((char *)&all[min], sizeof(athlete)); 
   f1.close();
   f2.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 10:23     Мусор в файлах
Посмотрите здесь:

C++ Мусор в строках
Мусор C++
C++ Мусор в строке
C++ Мусор в масивах char
Мусор в переменной C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:24  [ТС]     Мусор в файлах #21
Прошу прощения, а это что?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:27     Мусор в файлах #22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не по теме:
Borland C++ for DOS... ну вашу ж мать!
__________________
- Или помогай или переходи в другой топик, какая разница кто на чём пишет - главное результат - работоспособная программа
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:29  [ТС]     Мусор в файлах #23
У меня всё равно мусор пишется((
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:31     Мусор в файлах #24
Цитата Сообщение от maxim43k Посмотреть сообщение
Прошу прощения, а это что?
Что именно, твой цикл просто не отрабатывает, потому что программа в него даже не заходит
Вместо n вставь count - число структур атлет
Цитата Сообщение от maxim43k Посмотреть сообщение
f2.write((char *)&all[i], sizeof(athlete));
* *f2.seekp(0, ios::beg);
* *for(i=0;i<n;i++)
* * *{
* * * *f2.read((char *)&all[i], sizeof(athlete));
* * * *f1 << all[i].name << " "; *
* * * *f1 << all[i].f_name << " ";
* * * *f1 << all[i].age << " ";
* * * *f1 << all[i].time.min << " ";
* * * *f1 << all[i].time.sec << " " << endl;
* * *}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 11:31     Мусор в файлах #25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Или помогай
Я и помогаю. Намекаю, что не следует пользоваться компиляторами, совершенно не соответствующими стандарту. Очень-очень давно не соответствующими. С такими компиляторами нельзя пользоваться MSDN, т.к. их реализация отличается от стандартной. Имена файлов отличаются от стандартных. Названия функций отличаются от стандартных. По твоему это не помощь? Если ты можешь вернуть слепому зрение, ты это сделаешь или будешь на ощупь рассказывать о цветах радуги?
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:36     Мусор в файлах #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
По твоему это не помощь? Если ты можешь вернуть слепому зрение, ты это сделаешь или будешь на ощупь рассказывать о цветах радуги?
- вобщем пишу на пальцах, возми инстал твоей 10-ки или в чём кодишь прийди в реальную школу или институт где в лучшем случае стоит XP а иногда и 98-ая с Борландом, (попробуй установить и запустить её) и садись пиши код...Вобще живёшь в абстранированном мире - вернись на землю много учебных заведений имеют материально учебную базу прошлого тысячилетия, и даже в С 3.1 пишут.

PS:Извиняюсь за офтоп - больше в єтом топике его не будет
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:37     Мусор в файлах #27
maxim43k, вот результат прогона твоего алгоритма
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
 void process(athlete* &all, int count, char *f1_name, char *f2_name)
{
   int i, min = 0;
   all = new athlete[count];
   fstream f1(f1_name, ios::in | ios::out);
   if (f1.fail())
     {
       cout << "F1 ГЋГёГЁГЎГЄГ*!" << f1.rdstate() << endl;
     }
   fstream f2(f2_name, ios::in | ios::binary | ios::out);
   if (f2.fail())
     {
       cout << "F2 ГЋГёГЁГЎГЄГ*!" << f2.rdstate() << endl;
     }
   cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ñïîðòñìåГ*Г*Гµ\n"
         "(èìÿ, ГґГ*ìèëèÿ, âîçðГ*Г±ГІ, ðåçóëüòГ*ГІ Гў ìèГ*. ГЁ Г±ГҐГЄ. ÷åðåç ïðîáåë):\n";
   for (i = 0; i < count; ++i)
     {
        cout << i + 1 << ". ";
        cin >> all[i].name;
        cin >> all[i].f_name;
        cin >> all[i].age;
        cin >> all[i].time.min;
        cin >> all[i].time.sec;
     }
  
   f1 << "\nÏðîâåðêГ* ñ÷èòûâГ*Г*ГЁГї ГЁГ§ F2: \n";
   f2.seekg(0,ios::beg);
   for(i=0; i<count; i++)
   f2.write((char *)&all[i], sizeof(athlete));
   f2.seekp(0, ios::beg);
   for(i=0;i<count;i++)
     {
       f2.read((char *)&all[i], sizeof(athlete));
       f1 << all[i].name << " ";  
       f1 << all[i].f_name << " ";
       f1 << all[i].age << " ";
       f1 << all[i].time.min << " ";
       f1 << all[i].time.sec << " " << endl;
     }
   for (int k = 0; k < count; k++)
   if (k == 0) min = k;
   else if (all[k].age < all[min].age) min = k;
         cout << "\nГ‘Г*ìûé ГѕГ*ûé ГіГ·Г*Г±ГІГ*ГЁГЄ:\n";
         cout << "Ïîðÿäêîâûé Г*îìåð Гў ðååñòðå: " << min 
                << "\nÈìÿ: " << all[min - 1].name 
                << "\nГ”Г*ìèëèÿ: " << all[min - 1].f_name
                << "\nÂîçðГ*Г±ГІ: " << all[min - 1].age 
                << "\nÐåçóëüòГ*ГІ: " << all[min - 1].time.min 
                << " ìèГ*. " << all[min - 1].time.sec << " Г±ГҐГЄ. ";
 
   ofstream file("F2.bin", ios::out | ios::binary);
   file.write((char *)&all[min], sizeof(athlete)); 
   file.close();
   f2.close();
   f1.close();
}
Миниатюры
Мусор в файлах  
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:38     Мусор в файлах #28
Как видишь всё записалось и считалось - программа вывела что запись 1 минимальная
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:48  [ТС]     Мусор в файлах #29
Спасибо огромное!!! Несколько дней пытался отладить программу, код переписывал несколько раз. P.S. есть малюсенькая проблемка, как сделать так, чтобы данные из второго файла на экране были человеческим шрифтом?

Мусор в файлах
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 12:10  [ТС]     Мусор в файлах #30
Из-за чего так происходит? Как этого избежать?
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 12:24     Мусор в файлах #31
Цитата Сообщение от maxim43k Посмотреть сообщение
P.S. есть малюсенькая проблемка, как сделать так, чтобы данные из второго файла на экране были человеческим шрифтом?
- думаю это потому что поток f1 не имеет флага ios::binary попробуй его и в f1_name ввести
PS:Зачем, делал F2.bin делай F2.txt и не мучайся - бинарник с текстом ничем от txt не отличается кроме как обработкой '\r\n'
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 12:41  [ТС]     Мусор в файлах #32
По заданию нужен бинарный файл

Добавлено через 2 минуты
Установка флага не помогла
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:30     Мусор в файлах #33
Цитата Сообщение от maxim43k Посмотреть сообщение
f1 << all[i].name << " "; *
* * * *f1 << all[i].f_name << " ";
* * * *f1 << all[i].age << " ";
* * * *f1 << all[i].time.min << " ";
* * * *f1 << all[i].time.sec << " " << endl;
Замени на такой код (не делай прямой ввод в поток)
C++
1
2
3
4
5
all[i].f_name << " ";
all[i].age << " ";
all[i].time.min << " ";
all[i].time.sec << " " << endl;
f1.write((char *)&all[i], sizeof(athlete));
Проблемма в том что в коносли OEM кодировка а в файле ANSI или UTF
f1.write // будет писать в кодировке файла
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 13:45  [ТС]     Мусор в файлах #34
Мусор в файлах
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:52     Мусор в файлах #35
Есть такие библиотечные функции min и max - поетому компилятор ругается на то что у переменной такое же имя, попробуй записать imin или iMin
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:56     Мусор в файлах #36
Впринципе мой борланд (пришлось его отрыть) пропустил без предупреждений даже min
Миниатюры
Мусор в файлах  
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:58     Мусор в файлах #37
Он не на это ругается, а что к указателю применяется оператор <<.
f2 в цикле записать забыл ты везде.
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:59     Мусор в файлах #38
Стоп я въехал
maxim43k, в том цикле о котором говорил оставь лишь
C++
1
2
3
4
5
for(i=0;i<count;i++)
{
       f2.read((char *)&all[i], sizeof(athlete));
       f1.write((char *)&all[i], sizeof(athlete));
}
- думал там их с клавы вводишь, сори
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:59     Мусор в файлах #39
Не то написал. f2 не надо. Пробел по другому добавить надо, не через <<
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2011, 14:00     Мусор в файлах
Еще ссылки по теме:

C++ Мусор в массиве
Мусор и оператор new C++
Мусор в конце строки C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 14:00     Мусор в файлах #40
Deviaphan, да понял я
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
думал там их с клавы вводишь
Yandex
Объявления
09.09.2011, 14:00     Мусор в файлах
Ответ Создать тему
Опции темы

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