Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
1

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2011, 10:23
Ответы с готовыми решениями:

Есть 2 файла. В файлах числа, найти самое большое число в обоих файлах
С++ Есть два файла В обоих файлах записаны слова Найти самое большое число в обоих файлах

Мусор
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define n 10 int main() { int a,b,i,q; ...

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

Мусор и оператор new
Создаю глобальный указатель на структуру, инициализирую некоторые поля после выделения оператором...

46
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:24  [ТС] 21
Author24 — интернет-сервис помощи студентам
Прошу прощения, а это что?
0
Заблокирован
Автор FAQ
09.09.2011, 11:27 22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не по теме:
Borland C++ for DOS... ну вашу ж мать!
__________________
- Или помогай или переходи в другой топик, какая разница кто на чём пишет - главное результат - работоспособная программа
0
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
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 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
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 11:48  [ТС] 29
Спасибо огромное!!! Несколько дней пытался отладить программу, код переписывал несколько раз. P.S. есть малюсенькая проблемка, как сделать так, чтобы данные из второго файла на экране были человеческим шрифтом?

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

Добавлено через 2 минуты
Установка флага не помогла
0
Заблокирован
Автор 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 // будет писать в кодировке файла
1
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
09.09.2011, 13:45  [ТС] 34
Мусор в файлах
0
Заблокирован
Автор FAQ
09.09.2011, 13:52 35
Есть такие библиотечные функции min и max - поетому компилятор ругается на то что у переменной такое же имя, попробуй записать imin или iMin
0
Заблокирован
Автор FAQ
09.09.2011, 13:56 36
Впринципе мой борланд (пришлось его отрыть) пропустил без предупреждений даже min
Миниатюры
Мусор в файлах  
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:58 37
Он не на это ругается, а что к указателю применяется оператор <<.
f2 в цикле записать забыл ты везде.
0
Заблокирован
Автор 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));
}
- думал там их с клавы вводишь, сори
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:59 39
Не то написал. f2 не надо. Пробел по другому добавить надо, не через <<
0
Заблокирован
Автор FAQ
09.09.2011, 14:00 40
Deviaphan, да понял я
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
думал там их с клавы вводишь
0
09.09.2011, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2011, 14:00
Помогаю со студенческими работами здесь

Мусор в массиве
Задание: Подсчитать количество ненулевых разрядов в двоичной записи заданного натурального числа. ...

Мусор в строке
Добрый вечер, есть функция которая принимает строку типа char*, когда я передаю этой функции строку...

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

Мусор в переменной
Здравствуйте, есть следующий фрагмент кода: void main() { setlocale(LC_ALL,&quot;&quot;);...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru