Изменение отметки в файле базы данных колледжа в C - PullRequest
0 голосов
/ 26 марта 2020

Итак, у меня есть этот код, функция для изменения отметки в базе данных колледжа. Таким образом, нам нужно получить номер класса, и для каждого ученика в этом классе мы изменим первую отметку и сохраним ее позже в том же файле. например, мы получаем класс 1026. У Андрея есть эти оценки (цифры от 1 до 10): 4,6,9,9,9,9,9,9,9,10. Елена получила: 10,6,8,7,7, 6,6,7,9,10 После вызова функции мы получим: Андрей: 10,6,9,9,9,9,9,9,9,10 Елена 5,6,8,7,7, 6,6,7,9,10 Однако после первого ученика в этом классе чтение нового первого знака для второго будет повторяться бесконечно, и я не могу понять это. Вот код:

typedef struct{
    char is;//this will help us to see if the registration number exist in the file(0-if false, 1-if true)
    int nrmat;//registration number
    char name[20];
    int year;
    int class;
    float mark[10];
}stud;

void new_mark(char name_file[20])
{
    FILE *f;
    stud a;
    int class, mark;
    if(!(f=fopen(name_file,"rb+"))) printf("no file found");
    else {  
            printf("\nclass = ");scanf("%d",&class);
            while(!feof(stdin))
            {
                rewind(f);
                fread(&a,sizeof(stud),1,f);
                while(!feof(f))
                {
                    if(a.is == 1 && a.class == class)
                    {
                        printf(a.name);printf("\n\n");
                        printf("the new mark is: ");scanf("%d", &mark);
                        a.mark[0] = mark;
                        fseek(f,(a.nrmat-1)*sizeof(stud),0);
                        fwrite(&a,sizeof(stud),1,f);
                    }
                fread(&a,sizeof(stud),1,f);
                }
            printf("\nclass = ");scanf("%d",&class);
            }
    fclose(f);
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...