Scanf ожидает ввода вместо завершения - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу простую функцию для хранения информации о студентах внутри структуры. Формат должен быть: «Имя, фамилия, указатель, поле, факультет, год». Я попытался сделать это с помощью 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;
};
...