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

Почему файл пустой? - C++

Восстановить пароль Регистрация
 
LiaHiM
1 / 1 / 0
Регистрация: 03.12.2007
Сообщений: 15
20.01.2010, 00:19     Почему файл пустой? #1
Вроде бы делаю всё верно...
Объявлен массив структур
C++
1
2
3
4
5
6
7
struct book {
  int index;
  char title[20];
  char autor[20];
  int publdate;
  int number;
  } lib [SIZE];
Заполняю массив
C++
1
2
3
4
5
6
7
8
9
10
    cout << "Порядковый номер книги -> ";
    cin >> lib[i].index;
    cout << "Название книги -> ";
    cin >> lib[i].title;
    cout << "Автор книги -> ";
    cin >> lib[i].autor;
    cout << "Год издания книги -> ";
    cin >> lib[i].publdate;
    cout << "Количество -> ";
    cin >> lib[i].number;
Дальше сохраняю в бинарном режиме
C++
1
2
3
4
5
6
7
8
9
10
11
12
   FILE *out;
   char fname[20];
   printf("Введите имя файла\n");
   scanf("%s", &fname);
   if ((out = fopen (fname, "wb")) == NULL)
   {
     printf("Ошибка открытия файла\n");  
     getch();
     return;   
   }
   fwrite(&lib, sizeof(lib), SIZE, out);
   fclose(out);
Вложения
Тип файла: 7z LB_11_8.7z (1.5 Кб, 10 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
20.01.2010, 00:40     Почему файл пустой? #2
ну я точн оне знаю но я когда делал курсак то записывал так :
C
1
fpintf(out,"%s ",lib[i].title);
Добавлено через 1 минуту
но ето не в бинарном вроде у меня )
LiaHiM
1 / 1 / 0
Регистрация: 03.12.2007
Сообщений: 15
20.01.2010, 01:08  [ТС]     Почему файл пустой? #3
Да, это в текстовом режиме

Добавлено через 3 минуты
Можно конечно и в текстовом, в цикле, но хотелось одним махом записать массив структур, а потом также считать

Добавлено через 7 минут
C++
1
2
3
   for(k=0; k<SIZE; k++)
     if (lib[k].index) 
       fprintf(out, "%i %s %s %i %i\n", lib[k].index,lib[k].title,lib[k].autor,lib[k].publdate, lib[k].number);
Ну хоть теперь что-то в фале есть)) Как я понял считывать можно аналогично командой fscanf?

Добавлено через 14 минут
C
1
2
3
4
5
   k=0;
   while (!feof((in)))
   {
     fscanf(in, "%i %s %s %i %i\n", &lib[k].index, &lib[k].title, &lib[k].autor, &lib[k].publdate, &lib[k].number);
     k++;
}

Добавлено через 1 минуту
Все записывает и считывает. В общем-то задачу решена...но как же с бинарными? В чем я накосячил?
Alexiski
Любитель давать советы
 Аватар для Alexiski
338 / 130 / 2
Регистрация: 12.01.2009
Сообщений: 511
20.01.2010, 02:48     Почему файл пустой? #4
Похоже, что Вы просто слишком много хотите записать. Ведь lib - это массив из book и поэтому
C++
1
sizeof(lib) == sizeof(book) * SIZE
То есть надо или
C++
1
fwrite(&lib, sizeof(book), SIZE, out);
или
C++
1
fwrite(&lib, sizeof(lib), 1, out);
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
20.01.2010, 14:08     Почему файл пустой? #5
Можно так записать
C++
1
2
3
4
for(int i=0;i<SIZE;i++)
    {
    fwrite(&lib[i], sizeof(lib[i]),1, out);
    }
Yandex
Объявления
20.01.2010, 14:08     Почему файл пустой?
Ответ Создать тему
Опции темы

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