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

Поиск:

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


Новичок



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

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



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

#include <stdio.h>
#include <stdlib.h>
#define D 5
#define X 2
#define E 23
int main(){
struct rost {   
    char n[12];
    char k[3];
    int r;
} ro[X+1];
int a[D]={1,7,3,21,15};
int b[D]={5,12,4,22,20};
int i = 0;
FILE * f;
f = fopen( "D:\\bynary.txt", "a+b" );
for(i=0; i<D; i++){                                                                 //perestanovka zapisey
        fseek( f, (a[i]-1) * sizeof(rost)  , SEEK_SET );
        fread(&ro[0], sizeof(rost), 1, f);
        fseek( f, (b[i]-1) * sizeof(rost)  , SEEK_SET );
        fread(&ro[1], sizeof(rost), 1, f);
        fseek( f, (a[i]-1) * sizeof(rost)  , SEEK_SET );
        fwrite(&ro[1],sizeof(rost),1,f);
        fseek( f, (b[i]-1) * sizeof(rost)  , SEEK_SET );
        fwrite(&ro[0],sizeof(rost),1,f);
}
printf("Vv0d:");
scanf("%s %s %d", ro[X].n, ro[X].k, &ro[X].r ); //schityvane novoy zapisi
fseek(f, E*sizeof(rost) ,SEEK_SET); // ustanovka kursora  v konec fayla
fwrite(&ro[X], sizeof(rost),1,f); // dobavlenie zapisi v fail !!! REALNO ONA NE DOBAVLAETSYA Pochemu?
fseek(f,0,SEEK_SET); //v nachalo fayla
for(i=0; i<(E+1); i++){ /*schityvanie zapisey po 1-y i vyvod na ekran !!!NOVAYA ZAPIS` NE vyvoditsa
A VMESTO NEE VYVODITSA TRET`ya VTOROY rAZ!!*/ 
    fread(&ro[0], sizeof(rost), 1, f);
    printf("%s %s %d\n", ro[0].n, ro[0].k, ro[0].r);
}
fclose(f);
getchar();
getchar();
return 0;
}

ЗАРАНЕЕ СПАСИБО!
PM MAIL   Вверх
xvr
Дата 3.6.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вот это
Код

f = fopen( "D:\\bynary.txt", "a+b" );
открывает файл в режиме append, что заставляет его дописывать все в хвост, вне зависимости от того, куда был сделан fseek перед записью

PM MAIL   Вверх
AlexeySheglov
Дата 3.6.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну да, убрал fseek перед 30: fwrite(&ro[X], sizeof(rost),1,f);
НИЧЕГО НЕ ИЗМЕНИЛОСЬ.
PM MAIL   Вверх
zim22
Дата 3.6.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(AlexeySheglov @  3.6.2009,  12:40 Найти цитируемый пост)
ну да, убрал fseek 

fseek ни при чём.
перечитайте ещё раз пост xvr


--------------------
PM MAIL   Вверх
AlexeySheglov
Дата 3.6.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



изменил режим на w+b, выводит отрицательные вещественные числа 6-х порядков!
так в чем же дело. то, что в режиме a+b пишется в хвост понял, но в режиме w+b происходит усечение файла. КАК БЫТЬ?
файл-то нужно сохранить, но с нек-ми изменениями, причем сначала переставляются записи, а потом уже добвление в хвост?

Добавлено через 4 минуты и 8 секунд
УУУУУУУ. Спасибо. Дошло. Нужен режим r+b. Все работает норм.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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