Как сканировать без дополнительного массива или выделения памяти - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно написать для структурирования информации в следующем порядке:

Ввод: [Имя], [Фамилия], [Индекс]
Вывод: [Имя] [Фамилия], [Индекс]

При вводе каждое слово должно быть разделено запятой и пробелом, но при выводе только SURNAME и INDEX должны быть разделены запятой.Я уже сделал это, и он работает нормально, но с дополнительным массивом, но теперь я должен сделать это без использования дополнительных массивов или выделения памяти.

Вот что я сделал:

struct student_t
{
   char name[20];
   char surname[40];
   int index;
};
int main(int argc, char *argv[]) {
struct student_t dl;
int err;

if (read(&dl, &err)==NULL)
{
    printf("Incorrect input");
    return 1;
}

show(&dl);

return 0;
}
struct student_t* read(struct student_t* p, int *err_code)
{
   char arr[500];
   if (fgets(arr, 500, stdin)){
      char *name=strtok(arr, ",");
      if (name){
         sscanf(name, " %19s", p->name);  
         char *surname=strtok(NULL, ",");
         if (surname){
            sscanf(surname, " %39s", p->surname);
            char *index=strtok(NULL, ",");
            if (index){
               p->index=(int)strtol(index, NULL, 10);
            }
         }
      }
   }
}

Iтакже необходимо установить значение err_code:
0-success,
1-нет указателя на структуру или нет запятых на входе,
имя только для 2 загружено правильно,
имя и фамилия только для 3загружены правильно.

...