Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > чтение из файла


Автор: maza 29.11.2003, 22:07
Доброго времени суток. Народ подскажите, что делаю не так:
записываются структуры xxx по одной пока не будет достигнуто условие (напр кол-во записей =5)
Код

struct xxx
{
 char a[10];
 char b[5];
 float c;
 int d;
};
...

struct xxx m;
printf("%s   %s   %f   %d", m.a, m.b, &m.c, &m.d);
fwrite(&m, sizeof(struct xxx), 1, tmp);
...

перед fwrite, ессно, вводятся эти данные каким-нибудь юзером.
при чтении выводит на экран 5 записей (в строку, по полям через пробел)
Код

void studHome(FILE *tmp)
{
 struct xxx m;
 ...
   while (!feof(tmp))
   {
     fread(&m, sizeof(struct xxx), 1, tmp);
     printf("\n%s %s %3.1f %d", m.a, m.b, m.c, m.d);
 ...
   }
 ...
 }
}

но почему-то повторяет 5-ю запись 2 раза notify.gif butbut.gif
И еще, мона ли в в поле, напр. "а", и в файл сохранять только 10 символов, а лишние чтобы отбрасывались?

Автор: Azer 8.12.2003, 15:38
Не знаю, отвечали ли Вам (только,что прочел Вашу поблему 08.12.2003 15:34).
Все очень просто: при выводе Вы делаете попытку чтения и сразу печатаете.
при этом при чтении после конца файла происходит сначала печать буфера (а в нем сидит последняя запись), а уж потом проверяется на конец файла.
Вам надо бы ПЕРЕД циклом сделать чтение;
затем в цикле СНАЧАЛА печатать, ПОТОМ пытаться прочесть ледующую запись.
Тогда все будет как надо.

Автор: bel_nikita 8.12.2003, 17:16
do {
.....
} while(!feof(tmp));

Автор: _hunter 8.12.2003, 18:42
to maza
можно, но писать придется только по полям smile.gif

Автор: NiJazz 8.12.2003, 21:18
maza, можно работать с помощью API: WriteFile и ReadFile.
С ними более всё наглядно. Но я не гарантирую, что получится. smile.gif
Толкьо не забудь: #include <windows.h>

Автор: Mellorn 12.12.2003, 12:05
а в Borland C можно писать с помощью API? По моему нет =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)