Для выполнения домашнего задания мне нужно заполнить список студенческих структур, который выглядит следующим образом:
struct Student {
int matriculationNumber;
char *firstName;
char *lastName;
char *birthday;
double averageGrage;
}
Фактические данные должны быть прочитаны из файла .csv
и выглядят примерно как
2345678; Мейер; Ганс; 12.10.1985; 2,4
1234567; Мюллер; Фриц; 17.05.1990; 1,9
Для чтения данных следует использовать fgetc()
.
Теперь проблема в том, как мне на самом деле заполнить поля структуры и как обрабатывать исключительные условия (т.е. неожиданные EOF
; подумайте, например, если строка не содержит поле birthday
или поле averageGroup
).
Вот как я бы сделал это интуитивно (что, скорее всего, неверно; -)):
Student student;
if (fillMatriculationNumber(&student, fp) == -1) { // return -1 on failure or EOF
goto failure;
}
if (fillFirstName(&student, fp) == -1) {
goto failure;
}
if (fillLastName(&student, fp) == -1) {
goto failure;
}
if (fillBirthday(&student, fp) == -1) {
goto failure;
}
if (fillAverageGrade(&student, fp) == -1) {
goto failure;
}
// OK
:failure
// print a message about what's wrong, and exit()