Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двоичные файлы 
:(
    Опции темы
Centyrion
Дата 18.5.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



Всем привет. Прошу помощь с лабой двоичные файлы. Суть задания: в двоичном файле с элементами типа int заменить четные элементы на 0, а нечетные на 1.
Вот моя программа:
Код

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void main()
{
    FILE *f_test1;
    int x;
    int len = sizeof x;
    f_test1=fopen("file1.dat","r+b");
    if(! f_test1) { puts("Nelz9 otkrytb fail !\n");
                    exit(1);
                  }
    while(! feof(f_test1))
  {
    cout<<x<<"  ";
    if(x&1) x = 1;
    else x = 0;
    fread((char*)&x,len,7,f_test1);
    cout<<x<<endl;
  }
    for( int i=0; i<7; i++ )
    fwrite((char*)&i, sizeof i,7,f_test1); 
    fclose(f_test1);
    _getch();
}


Но работает она не совсем так, как нужно. Где тут ошибка?  smile . Спасибо за помощь  smile 

Это сообщение отредактировал(а) Centyrion - 18.5.2008, 11:57
PM MAIL   Вверх
bsa
Дата 18.5.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Centyrion, строки 17-19 - ты используешь x до того, как в него что-то считал. Так задумывалось?  smile 
PM   Вверх
Centyrion
Дата 18.5.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



Ну если сделать так:
Код

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void main()
{
    FILE *f_test1;
    int x;
    int len = sizeof x;
    f_test1=fopen("file1.dat","r+b");
    if(! f_test1) { puts("Nelz9 otkrytb fail !\n");
                    exit(1);
                  }
    while(! feof(f_test1))
  {
    for( int i=0; i<7; i++ )
    fwrite((char*)&i, sizeof i,7,f_test1); 
    cout<<x<<"  ";
    if(x&1) x = 1;
    else x = 0;
    fread((char*)&x,len,7,f_test1);
    cout<<x<<endl;
  }
    fclose(f_test1);
    _getch();
}

то идет вообще какой-то бесконечный цикл... smile 
PM MAIL   Вверх
rrrFer
Дата 18.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 0
Всего: 1



Код

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void main(){
    FILE *f;
    int x[7],i,len = sizeof(int);
    f=fopen("f.dat","r+b");
    rewind(f);
    for(i=0;i<7&&!feof(f);i++){
        fread((char*)&x[i],len,1,f);
        if(x[i]%2==0) x[i]=1;
        else x[i]=0;
    }fclose(f);
    f=fopen("f.dat","wb");
    for(i=0;i<7;i++)
        fwrite((char*)&x[i],len,1,f); 
}

неправильно было все вообще, например, ты открыл файл по чтению и пытаешься в него писать.
я даже не могу догадаться что ты тут делать пытался:
Код

for( int i=0; i<7; i++ )
    fwrite((char*)&i, sizeof i,7,f_test1); 
    cout<<x<<"  ";
    if(x&1) x = 1;
    else x = 0;
    fread((char*)&x,len,7,f_test1);
почему  fwrite((char*)&i, sizeof i,7,f_test1); 
в sizof передается тип а не переменная вроде-бы,
а ну только в моей программе файл двоичный не создается надо еще вот:
Код

#include <iostream>
using namespace std;
void main(){
    FILE *f=fopen("f.dat","wb");
    int x;
    long size=sizeof(int);
    for(int i=0;i<7;i++){
        cin>>x;
        fwrite((char*)&x,size,1,f);
    }fclose(f);
}

или можешь вручную создать...

PM MAIL WWW ICQ   Вверх
bsa
Дата 18.5.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Centyrion, ты хоть сам понимаешь, что ты делаешь? зачем ты один цикл внес в другой?
Если бы ты делал отступы правильно, то такой проблемы наверняка уже не было.
PM   Вверх
Vadv
Дата 25.5.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



Народ подскажите, решил новую тему не создавать..
Код

void main()
{
    FILE *fp,*fp1,*fp2;
    int a,b;
    float c[20];
    srand(time(0));
    fp=fopen("input.dat","wb");
    for(int i=0;i<20;i++)
    {
        a=rand()%20-10;
        b=rand()%20+1;
        c[i]=a+float(b)/100;
    }
    fwrite(&c,sizeof(float),20,fp);
    fclose(fp);
    fp=fopen("input.dat","rb");
    float d;
    while(!feof(fp))
    {
        fread(&d,sizeof(float),1,fp);
        cout<<d<<endl;
    }
    fclose(fp);
    
}

последнее число выводит два раза, как исправить? Заранее спасибо..


Это сообщение отредактировал(а) Vadv - 25.5.2008, 13:23
PM MAIL   Вверх
rrrFer
Дата 25.5.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 0
Всего: 1



Код

#include <stdio.h>
#include<stdlib.h>
#include <time.h>
void main()
{
    FILE *fp,*fp1,*fp2;
    int a,b;
    float c[20];
    time_t t;
    srand((unsigned) time(&t));
    fp=fopen("input.dat","wb");
    for(int i=0;i<20;i++)
    {
        a=rand()%20-10;
        b=rand()%20+1;
        c[i]=a+float(b)/100;
    }
    fwrite(&c,sizeof(float),20,fp);
    fclose(fp);
    fp=fopen("input.dat","rb");
    float d;
    while(fread(&d,sizeof(float),1,fp))
        printf("%f",d);
    getchar();
    fclose(fp);
}

и еще если подключил stdio то негоже cout использовать smile
----------
правильнее было бы написать: 
Код

define size sizeof(float);

и потом вместо того чтоб каждый раз(еще и в циклах) вызывать эту функцию(sizeof()) - писать size
---------
и еще у тебя *fp1,*fp2 не испрользуются нигде

Это сообщение отредактировал(а) rrrFer - 25.5.2008, 15:48
PM MAIL WWW ICQ   Вверх
Vadv
Дата 25.5.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



Спасибо большое, люблю больше потоки ввода вывода простоsmile
насчет не пользуемых *fp1,*fp2 , просто прога до конца не дописана была(уже испозуется они) вот и все, я уже дописал, спасибо еще раз большое
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.