Подскажите, где ошибка - C (СИ) (148480)
Формулировка задачи:
Это не вся программа, а только функция которая работает не корректно. При замене 'оценок=2'на любую другую, функция перезаписывает в файл по мимо что ты ввёл еще одну структуру но уже пустую.
скажите хоть куда смотреть ...
void find(FILE *vedomost)
{
char c;
int s;
long int i;
vedomost=fopen("file1.dat","rb+");
puts(" Vvedite 2 chtob vivesti info o dvoeshnikax: ");
scanf("%d",&s);
fread(&v1,sizeof(v1),1,vedomost);
while (v1.balls1==s || v1.balls2==s || v1.balls3==s || v1.balls4==s)
{
if (v1.balls1==s || v1.balls2==s || v1.balls3==s || v1.balls4==s)
{
printf("\n familiya %s\n nomer za4etnoy knigki %d ",v1.name,v1.zachetka);
printf("\nOcenka_#1:%d\nOcenka_#2:%d\nOcenka_#3:%d\nOcenka_#4:%d\n ",v1.balls1,v1.balls2,v1.balls3,v1.balls4);
printf("\n Izmenit - y | Next - n");
c=getch();
if (c=='y')
{
printf("\nOcenka_#1: ");
scanf("%d",&v1.balls1);
printf("\nOcenka_#2:");
scanf("%d",&v1.balls2);
printf("\nOcenka_#3:");
scanf("%d",&v1.balls3);
printf("\nOcenka_#4:");
scanf("%d",&v1.balls4);
i=sizeof(v1);
fseek(vedomost,-i,1);
fwrite(&v1,sizeof(v1),1,vedomost);
}
fread(&v1,sizeof(v1),1,vedomost);
}
}
fclose(vedomost);
}Решение задачи: «Подскажите, где ошибка»
textual
Листинг программы
vedomost=fopen("file1.dat","rb+");
Объяснение кода листинга программы
- В этом коде используется функция fopen, которая открывает файл
file1.datдля чтения и записи. - В качестве параметров функции fopen используются строки
file1.datиrb+. - Строка
file1.datпредставляет собой имя файла, который нужно открыть. - Строка
rb+представляет собой режим работы с файлом. Здесьrозначает чтение, аb+означает, что файл будет открыт для чтения и записи, и текущая позиция чтения будет установлена в начало файла. - Результатом работы функции fopen является файловый указатель, который сохраняется в переменной vedomost.
- После работы с файлом, его необходимо закрыть с помощью функции fclose, чтобы освободить системные ресурсы.