Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 21:23   #1
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию Проблемы с записью в файл

Если в файл записать число 10 (в бинарном режиме), то при чтении получаются совершенно неадекватные числа (не все, начиная с числа 10 и далее). Вот программа, мож я что-то не так делаю?
P.S. извините за нечитабельность кода, я его раз 20 переписывал/дописывал/списывал/стирал


Код:
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
void main()
{
clrscr();

int a[20]={1,2,3,4,5,6,7,8,9,232,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
int b[20];
int c;
int i,n,j;
cin>>n;
/*
for(i=0;i<20;i++)
                 {
                 cin>>a[i];
                 }
*/
for(j=0;j<n;j++){
ofstream f1("f",ios::app, ios::binary);
for(i=0;i<20;i++)
                 {
                 cout<<a[i]<<" ";
                 }
                 cout<<endl;
f1.write((char *) &a, sizeof a);
f1.close();}
for(j=0;j<n;j++ ){
ifstream f2("f", ios::binary);
f2.read((char *) &b, sizeof b);
f2.close();

for(i=0;i<20;i++)
                 {
                 cout<<b[i]<<" ";
                 }
                 cout<<endl;
for(i=5;i<10;i++)
                 {
                 c=b[i];
                 b[i]=b[i+5];
                 b[i+5]=c;
                 }

ofstream f3("g", ios::app, ios::binary);
for(i=0;i<20;i++)
                 {
                 cout<<b[i]<<" ";

                 }
                 f3.write((char *) &b, sizeof b);
                 cout<<endl;
                 cout<<"edem dalee"<<endl;
f3.close();}

getch();
}
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 02.04.2009 в 21:26.
ROD вне форума Ответить с цитированием
Старый 02.04.2009, 21:34   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А вы можете в двух словах описать что там делается?
Вот ввожу 1, получаю:
Код:
1
1 2 3 4 5 6 7 8 9 232 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
1 2 3 4 5 6 7 8 9 232 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
1 2 3 4 5 -1 -2 -3 -4 -5 6 7 8 9 232 -6 -7 -8 -9 -10
edem dalee
Как я понимаю, здесь первая строка - то, что пишется в файл f.
Вторая - то, что там записано (то есть, чтение из него).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 21:43   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

ой, как-то не додумался объяснить суть программы.

Суть такая. Программа гененрирует файл содержащий последовательность 10 положительных целых чисел, 10 отрицательных, 10 положительных, 10 отрицательных... и т.д.

Затем она читает его, и переставляет все это так, что цифры идут 5 положительных, 5 отрицательных...
затем запись в другой файл.

На экран выводится:
Исходные 20 чисел (оригинал), которые она записывает в файл f
То, что считалось из файла f
То, что получилось после перестановки, и будет записано в файл g

Если попробоваеть вставить вместо любого из чисел в строке

Код:
int a[20]={1,2,3,4,5,6,7,8,9,232,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
10, то вместо 10 и последующих чисел считаются (а видимо и запишутся) непонятно откуда взятые числа.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 02.04.2009 в 21:47.
ROD вне форума Ответить с цитированием
Старый 02.04.2009, 22:01   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Если попробоваеть вставить вместо любого из чисел в строке
....
10, то вместо 10 и последующих чисел считаются (а видимо и запишутся) непонятно откуда взятые числа.
Эм... Заменил в массиве число 232 на 10. Вот результат:

Код:
1
1 2 3 4 5 6 7 8 9 10 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
1 2 3 4 5 6 7 8 9 10 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
1 2 3 4 5 -1 -2 -3 -4 -5 6 7 8 9 10 -6 -7 -8 -9 -10
edem dalee
Вроде, все как и должно быть.

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 22:24   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Нет, я не забываю их удалять.
У меня, если заменить 232 на 10, программа выдает
Цитата:
1
1 2 3 4 5 6 7 8 9 10 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
1 2 3 4 5 6 7 8 9 2573 -256 -257 -513 -769 -1025 -1281 -1537 -1793 -2049 -2305
1 2 3 4 5 -256 -257 -513 -769 -1025 6 7 8 9 2573 -1281 -1537 -1793 -2049 -2305
edem dalee
Причем сие чудо наблюдалось в компиляторе Borland Turbo C++ 3.1 в универе, и у меня дома в Borland C++ 5.02
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 02.04.2009, 22:28   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да, забыл спросить:
Код:
ofstream f3("g", ios::app, ios::binary);
у вас компилируется в таком виде?
Просто правильно будет:
Код:
ofstream f3("g", ios::app|ios::binary);
Мой компилятор (MinGW) сразу мне об этом сказал. )
Возможно, ошибка кроется в этом.

Вот, прикладываю исходник с экзешником.
Вложения
Тип файла: rar ROD.rar (114.7 Кб, 9 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 22:30   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Блин, точно. Спасибо, помогло. (вообще очень странно, что в книге Шильдта было написанно именно через запятую).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 02.04.2009, 22:31   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
вообще очень странно, что в книге Шильдта было написанно именно через запятую
Быть может, опечатка? Или редактор "подправил".
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.04.2009, 22:52   #9
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Врядли опечатка, ибо у него так не в одном месте написано, и не в двух. МБ и редактор подправил. ХЗ.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 03.04.2009, 12:32   #10
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
(вообще очень странно, что в книге Шильдта было написанно именно через запятую).
Странно, передо мной сейчас лежит его книга (Самоучитель С++) - там все написано правильно
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью структуры в файл JamS007 Общие вопросы C/C++ 5 07.01.2009 23:13
задача с записью |v||v|<<IpShot Паскаль, Turbo Pascal, PascalABC.NET 11 23.08.2008 17:02
Проблема с записью большого файла Rembo Свободное общение 17 17.06.2008 12:47
Проблема с записью в реест eks-s Общие вопросы Delphi 4 02.02.2008 13:42
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49