#c
Вопрос:
Я пытался решить эту проблему на вечер и до поздней ночи, но до сих пор не понимаю, в чем я ошибаюсь. Проблема заключается в функциях поиска студентов. Даже пользователь вводит правильный идентификатор учащегося, но он всегда отправляет ответ «Без записи» (иначе). Я так новичок в программе С, и завтра я должен представить этот проект. Я буду очень признателен, если кто-нибудь сможет мне помочь. Большое спасибо. вот полный код. https://gist.github.com/KilveKlein/92cf95799ba99f86feccfa81b5bc9ed1
void search_student() {
int find_student_id;
printf("3. search student: nnn");
int student_ID = 0;
int isFound = 0;
printf("Type ID student: "); fflush(stdin);
scanf("%u", amp;find_student_id);
FILE *file;
file = fopen("DataStudentRecord.txt", "rb");
while (fread(amp;stu, sizeof(stu), 1, file)) {
if (stu.ID == find_student_id) {
isFound = 1;
break;
}
}
if (isFound) {
printf("nnttttInfo student");
printf("Name: %s", stu.fullName);
printf("ID: %s", stu.ID);
printf("class: %d", stu.classRoom);
printf("Date of birth: %s", stu.dateOfBirth);
printf("Gender: %s", stu.gender);
printf("section: %s", stu.section);
printf("address: %s", stu.address);
printf("phone number: %ld", stu.phoneNumber);
} else {
printf("nnnttttttNo record.n");
printf("nttttEnter to continue...");
getch();
system("cls");
}
fclose(file);
return;
}
Комментарии:
1. не могли бы вы включить свою
stu
структуру?2.
scanf("%u", amp;find_student_id);
< Кстати: Почему бы вам просто не распечатать все записи, включая результаты сравнения?3. вы уверены
fread()
, что правильно считываете данные в свою структуру?4. Ваше
.txt
расширение подразумевает, что данные являются текстом ascii (например, вы читаете строкуfgets
и анализируете ее, заполняяstruct
поля). Но вы используетеfread
для чтения двоичных данных вstruct
. Итак, что же это такое? Обратите внимание, чтоfflush(stdin)
это UB (неопределенное поведение). Я бы переработал код, чтобы не использовать его.5. Вы, по-видимому, намеревались избавиться от ЗППП?