Я пишу простую функцию для хранения информации о студентах внутри структуры. Формат должен быть: «Имя, фамилия, указатель, поле, факультет, год». Я попытался сделать это с помощью scanf, но он не работает, когда я ввожу «Тайлер, Джозеф» вместо того, чтобы возвращать ошибку, потому что формат не достигнут, он ждет ввода. Редактировать. После последнего "," это пробел. Вот мой код:
{
while (getchar() != '\n')
;
trim(p->name);
if (strlen(p->name) == 0) {
err_code == NULL ? ' ' : (*err_code = 1);
return NULL;
}
if (scanf("%40[^,\n]%*[^,\n]", p->surname) == 1 && getc(stdin) == ',' &) {
while (getchar() != '\n')
;
trim(p->surname);
if (strlen(p->surname) == 0) {
err_code == NULL ? ' ' : (*err_code = 2);
return NULL;
}
if (scanf("%d%*c", &p->index) == 1) {
while (getchar() != '\n')
;
if (scanf("%49[^,\n]%*[^,\n]", p->field) == 1 && getc(stdin) == ',') {
while (getchar() != '\n')
;
trim(p->field);
if (strlen(p->field) == 0) {
err_code == NULL ? ' ' : (*err_code = 4);
return NULL;
}
if (scanf("%79[^,\n]%*[^ ,\n]", p->faculty) == 1 &&
getc(stdin) == ',') {
while (getchar() != '\n')
;
trim(p->faculty);
if (strlen(p->faculty) == 0) {
err_code == NULL ? ' ' : (*err_code = 5);
return NULL;
}
if (scanf("%d%* c", &p->year) == 1) {
err_code == NULL ? ' ' : (*err_code = 0);
return p;
} else {
err_code == NULL ? ' ' : (*err_code = 6);
return NULL;
}
} else {
err_code == NULL ? ' ' : (*err_code = 5);
return NULL;
}
} else {
err_code == NULL ? ' ' : (*err_code = 4);
return NULL;
}
} else {
err_code == NULL ? ' ' : (*err_code = 3);
return NULL;
}
} else {
err_code == NULL ? ' ' : (*err_code = 2);
return NULL;
}
}
else {
err_code == NULL ? ' ' : (*err_code = 1);
return NULL;
}
}
И структура:
struct student_t
{
char name[20];
char surname[40];
int index;
char field[50];
char faculty[80];
int year;
};