Re: допоможіть з редагуванням
А без рядку? Ось так:
[code=C++]fwrite(&tov,sizeof(tov),1,ftov);
//fseek(ftov,kol,kol);
fread(&tov,sizeof(tov),1,ftov);[/code]
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → допоможіть з редагуванням
А без рядку? Ось так:
[code=C++]fwrite(&tov,sizeof(tov),1,ftov);
//fseek(ftov,kol,kol);
fread(&tov,sizeof(tov),1,ftov);[/code]
Десь так, без зайвих змінних:
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, як на мене, давно минули. Для краси - графіка, а в консолі - текст.
річ в тому що в мене такий коледж де викладають тільки консоль... І викладачі вимагають робити гарні консолі...
Можна конкретизувати, що значить "не працює"? Мені, зрозуміло, нема на чому відлагоджувати цей код.
тобто в мене створює безкінечний цикл, і файл вже важить 2 гб)
а працюю я на борладні с++ 3.1
Так, вибачте. Справа в тому, що 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);
}
}
однак жодна з змінних в моїй программі не поміняла свого значення
доречі, якби я не використовував клін скрін в мене була б каша, бо як я написав з початку- це тільки підрограмма
є ще основна)
однак жодна з змінних в моїй программі не поміняла свого значення
Не зрозумів?
я маю на увазі що жодна змінна ціни зовсім не змінилась
запускаю, добавляю 2 записи, натискаю кнопку перерахувати,и натискаю просмотр
Вибачте, але у мене сьогодні телепатор щось барахлить, не можу прочитати, як саме ви це робите.
слухай не підкажешь в якій книзі треба шукати сортування структур без масиву?
або хоча б як зробити перевірку якщо наступний запис більше попереднього ми його перезаписуємо?
або мені треба зробити ще один файл у який записати цю структуру, та перевіряти, ну і перезаписувати?
Все сортується точніснько так, як і в масиві, просто замість "тупого" читання a[ i ] ми робимо щось на кшталт
fseek(file, i*size, SEEK_SET);
fread(...)
А алгоритм лишається незмінним.
Можете зробити функції "записати n-й запис в файлі" і "прочитати n-й запис в файлі", тоді все виглядатиме ще природніше.
а як зробити перевірку типу
поле>поле[i+1]
це мені треба записати поле(і+1) в іншу змінну?
щось типу такого?
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();
}
в мене війшла ось така вот баламуть, замість останньої А повинна бути С
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();
}