21

Re: допоможіть з редагуванням

А без рядку? Ось так:
[code=C++]fwrite(&tov,sizeof(tov),1,ftov);
//fseek(ftov,kol,kol);
fread(&tov,sizeof(tov),1,ftov);[/code]

22 Востаннє редагувалося koala (13.11.2013 16:19:44)

Re: допоможіть з редагуванням

Десь так, без зайвих змінних:

void per()
{
  clrscr();//воно тут точно треба?
  FILE *ftov=fopen("tov.dat","r+b");
  while(!feof(ftov))
  {
    fread(&tov, sizeof(tov), 1, ftov);
    tov.zena+=100;
    fseek(ftov, -sizeof(tov), SEEK_CUR);
    fwrite(&tov, sizeof(tov), 1, ftov);
  }
  fclose(fs);
}

Справа ваша, але часи, коли в консолі були потрібні якісь навороти типу clrscr, як на мене, давно минули. Для краси - графіка, а в консолі - текст.

Подякували: valera2203961

23 Востаннє редагувалося valera220396 (13.11.2013 16:16:43)

Re: допоможіть з редагуванням

річ в тому що в мене такий коледж де викладають тільки консоль... І викладачі вимагають робити гарні консолі...

24

Re: допоможіть з редагуванням

Ваш код не працює у мене

25 Востаннє редагувалося koala (13.11.2013 16:20:30)

Re: допоможіть з редагуванням

Можна конкретизувати, що значить "не працює"? Мені, зрозуміло, нема на чому відлагоджувати цей код.

26 Востаннє редагувалося valera220396 (13.11.2013 16:21:49)

Re: допоможіть з редагуванням

тобто в мене створює безкінечний цикл, і файл вже важить 2 гб)
а працюю я на борладні с++ 3.1

27 Востаннє редагувалося koala (13.11.2013 16:51:04)

Re: допоможіть з редагуванням

Так, вибачте. Справа в тому, що feof перевіряє, чи вдалою була остання операція читання, а так, як я написав, вони всі будуть вдалі. Гм...

void per()
{
  clrscr();
  FILE *ftov=fopen("tov.dat","r+b");
  if(ftov)
  {
    long int last=ftell(ftov);
    rewind(ftov);
    while(ftell(ftov)<last)
    {
      fread(&tov, sizeof(tov), 1, ftov);
      tov.zena+=100;
      fseek(ftov, -sizeof(tov), SEEK_CUR);
      fwrite(&tov, sizeof(tov), 1, ftov);
    }
    fclose(fs);
  }
}

28 Востаннє редагувалося valera220396 (13.11.2013 16:35:45)

Re: допоможіть з редагуванням

однак жодна з змінних в моїй программі не поміняла свого значення
доречі, якби я не використовував клін скрін в мене була б каша, бо як я написав з початку- це тільки підрограмма
є ще основна)

29

Re: допоможіть з редагуванням

valera220396 написав:

однак жодна з змінних в моїй программі не поміняла свого значення

Не зрозумів?

30

Re: допоможіть з редагуванням

я маю на увазі що жодна змінна ціни зовсім не змінилась

31

Re: допоможіть з редагуванням

Як ви це перевіряєте?

32

Re: допоможіть з редагуванням

запускаю, добавляю 2 записи, натискаю кнопку перерахувати,и натискаю просмотр

33

Re: допоможіть з редагуванням

Вибачте, але у мене сьогодні телепатор щось барахлить, не можу прочитати, як саме ви це робите.

34

Re: допоможіть з редагуванням

слухай не підкажешь в якій книзі треба шукати сортування структур без масиву?
або хоча б як зробити перевірку якщо наступний запис більше попереднього ми його перезаписуємо?
або мені треба зробити ще один файл у який записати цю структуру, та перевіряти, ну і перезаписувати?

35

Re: допоможіть з редагуванням

Все сортується точніснько так, як і в масиві, просто замість "тупого" читання a[ i ] ми робимо щось на кшталт

fseek(file, i*size, SEEK_SET);
fread(...)

А алгоритм лишається незмінним.
Можете зробити функції "записати n-й запис в файлі" і "прочитати n-й запис в файлі", тоді все виглядатиме ще природніше.

36

Re: допоможіть з редагуванням

дякую!=)

37

Re: допоможіть з редагуванням

а як зробити перевірку типу
поле>поле[i+1]
це мені треба записати поле(і+1) в іншу змінну?

38 Востаннє редагувалося valera220396 (13.11.2013 18:54:29)

Re: допоможіть з редагуванням

щось типу такого?

void per()
{
FILE *f;
int kol=1,i,k;
struct tovari s;
struct tovari t;
 f=fopen("tov.dat","r+b");
k=sizeof(tov);
while(!feof(f))
{ s=tov; fread(&tov,k,1,f);
}
rewind(f);
m:
 fread(&tov,k,1,f);
while(!feof(f))
{
  fseek(f,i*k,1);
  fread(&s,k,1,f);
  if(strcmp(tov.nazv,s.nazv)>0)
  { t=tov;
  tov=s;
  s=t;
  fwrite(&tov,k,1,f);
  goto m;
  }
  i++;

}
fclose(f);
pr_t();

}

39

Re: допоможіть з редагуванням

Не користуйтеся goto. Не робіть цього.

40 Востаннє редагувалося valera220396 (13.11.2013 21:04:00)

Re: допоможіть з редагуванням

в мене війшла ось така вот баламуть, замість останньої А повинна бути С

void per()
{
FILE *f;
int kol=1,i,k;
struct tovari s;
struct tovari t;
 f=fopen("tov.dat","r+b");
k=sizeof(tov);
while(!feof(f))
{ s=tov; fread(&tov,k,1,f);
}
 rewind(f);
while(!feof(f))
{  fread(&tov,k,1,f);
  if(strcmp(tov.nazv,s.nazv)>0)
  { t=tov;
  tov=s;
  s=t;
  }
     fseek(f,-k,1);
     fwrite(&tov,k,1,f);
     i++;
     fread(&tov,k,1,f);
}
fclose(f);
pr_t();

}
Post's attachments

Безымянный.png 2.17 kb, 191 downloads since 2013-11-13