Как правильно вывести структуру из файла по ключевому символу?Си

Мне нужно вывести из файла всю структуру по ключевому слову ID,то бишь мне надо ввести несколько структур(ID,Фамилия,сред.балл) и вывести какую-либо структуру по ключевому слову ID,но я столкнулся с ошибкой(Просто нет никакого вывода).Я в ступоре,и не понимаю как её можно исправить.Прошу указать способ устранения этой проблемы.

#include <stdio.h>
#include <windows.h>

void main() {

    struct student {
        int id_student;
        char name_student[30];
        float average_student;
    } e; // structure Employee e;

    FILE *f;
    if ((f = fopen("f2.dat", "wb")) == NULL) {
        printf("\nCannot open file for writing");
        exit(1);
    }
    int n, i;
//write to file
    printf("\n N-?");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
//structure е
        printf("\ID:");
        scanf("%d", &e.id_student);
        printf("\nName:");
        scanf("%s", &e.name_student);
        printf("\nAverage mark stats:");
        scanf("%f", &e.average_student);

//writing structure to file
        fwrite(&e, sizeof(e), 1, f);
    }
    fclose(f);
//read from file
    if ((f = fopen("f2.dat", "rb")) == NULL) {
        printf("\nCannot open file for reading");
        exit(1);
    }

    int buffer;
    printf("Input ID");
    scanf("%d", &buffer);
// output to screen
    while (fread(&e, sizeof(e), 1, f)) {
        if (e.id_student == buffer) {
            printf("\n%d %s %f", e.id_student, e.name_student, e.average_student);
        }
        fclose(f);
    }
}



Мой ввод

   N-?2
ID:4

Name:Dima

Average mark stats:5.0
ID:2

Name:Sasha

Average mark stats:6.0
Input ID 2

Process finished with exit code 0


Ответы (1 шт):

Автор решения: Harry

У вас какое-то странное сравнение

strcmp(LIST.id_student,buffer)

Ведь buffer у вас строка (что, кстати, позволяет пользователю ввести не число, и программа это проглотит), а LIST.id_studentint:

struct student{
    int   id_student;

Естественно, это сравнение никогда не сработает.

Правильное решение должно выглядеть как-то так:

printf("Input ID: ");
int buffer;
scanf("%d",buffer);
while(fread(&LIST,sizeof(LIST),1,f)){
    if (LIST.id_student == buffer)) {
→ Ссылка