С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
#1

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

09.09.2011, 10:23. Просмотров 1658. Ответов 46
Метки нет (Все метки)

В файлы попадает какой-то мусор, в чём ошибка?

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

Мусор - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define n 10 int main() { int a,b,i,q; scanf(&quot;%i&quot;,&amp;q); for(i=0;i&lt;q;i++) ...

Мусор в массиве - C++
Не могу понять в чем проблема, выводит мусор при компиляции в массивах name, avtor, izdat. Так же крашит при попытке ввода. #include...

Мусор в строках - C++
Привет всем!!! Я пишу помехоустойчивый декодер Витерби. Имеется граф 4x32. struct graf { int rebro0; int rebro1; ...

Мусор в строке - C++
Добрый вечер, есть функция которая принимает строку типа char*, когда я передаю этой функции строку вида &quot;C:/SDL/Maps/1.area&quot;, вместо этой...

Мусор в переменной - C++
Здравствуйте, есть следующий фрагмент кода: void main() { setlocale(LC_ALL,&quot;&quot;); srand(time(NULL)); const int ar = 10; int...

Мусор в массиве - C++
Задание: Подсчитать количество ненулевых разрядов в двоичной записи заданного натурального числа. Например в числе 13210 = 100001002 - 2...

46
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:18 #16
maxim43k, ввёл 1 запись и в коде записал так
C++
1
2
3
4
5
ofstream file("F2.bin", ios::out | ios::binary);
   file.write((char *)&all[min], sizeof(athlete)); 
   f1.close();
   f2.close();
   file.close();
На миниатюре скрин записанного в файлы, как видишь нет ничего лишнего, если слушаешь Deviaphan то я умываю руки...
0
Миниатюры
Мусор в файлах  
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:18  [ТС] #17
Всё равно ошибка

Мусор в файлах

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
#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], 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;
     }
   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();
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:21 #18
Цитата Сообщение от maxim43k Посмотреть сообщение
Всё равно ошибка
- сейчас прогоню твой код, введу 3 участника, жди...
0
Deviaphan
09.09.2011, 11:21
  #19

Не по теме:

Borland C++ for DOS... ну вашу ж мать!

0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:23 #20
D:\Мои документы\ЮрА\Личное\PROJECTS\t2\t2.cpp(88) : warning C4700: local variable 'n' used without having been initialized

Добавлено через 1 минуту
maxim43k, 72-ая строка n - не инициализировано, поставь count вместо n
0
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:24  [ТС] #21
Прошу прощения, а это что?
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:27 #22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не по теме:
Borland C++ for DOS... ну вашу ж мать!
__________________
- Или помогай или переходи в другой топик, какая разница кто на чём пишет - главное результат - работоспособная программа
0
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:29  [ТС] #23
У меня всё равно мусор пишется((
0
-=ЮрА=-
Заблокирован
Автор 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;
* * *}
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 11:31 #25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Или помогай
Я и помогаю. Намекаю, что не следует пользоваться компиляторами, совершенно не соответствующими стандарту. Очень-очень давно не соответствующими. С такими компиляторами нельзя пользоваться MSDN, т.к. их реализация отличается от стандартной. Имена файлов отличаются от стандартных. Названия функций отличаются от стандартных. По твоему это не помощь? Если ты можешь вернуть слепому зрение, ты это сделаешь или будешь на ощупь рассказывать о цветах радуги?
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:36 #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
По твоему это не помощь? Если ты можешь вернуть слепому зрение, ты это сделаешь или будешь на ощупь рассказывать о цветах радуги?
- вобщем пишу на пальцах, возми инстал твоей 10-ки или в чём кодишь прийди в реальную школу или институт где в лучшем случае стоит XP а иногда и 98-ая с Борландом, (попробуй установить и запустить её) и садись пиши код...Вобще живёшь в абстранированном мире - вернись на землю много учебных заведений имеют материально учебную базу прошлого тысячилетия, и даже в С 3.1 пишут.

PS:Извиняюсь за офтоп - больше в єтом топике его не будет
0
-=ЮрА=-
Заблокирован
Автор 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();
}
0
Миниатюры
Мусор в файлах  
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 11:38 #28
Как видишь всё записалось и считалось - программа вывела что запись 1 минимальная
0
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:48  [ТС] #29
Спасибо огромное!!! Несколько дней пытался отладить программу, код переписывал несколько раз. P.S. есть малюсенькая проблемка, как сделать так, чтобы данные из второго файла на экране были человеческим шрифтом?

Мусор в файлах
0
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 12:10  [ТС] #30
Из-за чего так происходит? Как этого избежать?
0
09.09.2011, 12:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2011, 12:10
Привет! Вот еще темы с ответами:

Мусор и оператор new - C++
Создаю глобальный указатель на структуру, инициализирую некоторые поля после выделения оператором new. Вызываю функцию (callback)...

Мусор в массиве - C++
Cчитываю значения из файла с помощью метода класса All в массив xlim void All :: InputLim() { ifstream f; f.open(&quot;2.txt&quot;,...

Мусор в консоли - C++
Ищу подстроку в строке и забиваю её в массив, в итоге в последнем cout выводится не то, что нужно: вместо &quot;ло в бою, очень ло&quot; выводится...

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


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

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

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