Создайте имя структуры с заданной строкой на языке C - PullRequest
0 голосов
/ 09 мая 2020

Я хочу создать код, который делает что-то вроде этого:

typedef struct {
  char name[1024];
  int age;
  char gender;
}person;

person Jacob = {.name = "Jacob", .age = 15, .gender = 'M'};

Но мне нужно использовать параметр scanf для получения переменных, примерно так:

typedef struct {
   char name[1024];
   int age;
   char gender;
}person;

char name_person[1024];
int age_person;
char gender_person;
scanf(" [:^\n],%d,%c",name_person,&age_person,&gender_person);

Я бы знал, смогу ли я сделать что-то вроде этого:

person name_person = {.name = name_person, .age = age_person, .gender = gender_person};

Сделать то же, что и в коде выше? Прошу прощения, если это звучит как глупый вопрос, я новичок в языке C.

Ответы [ 3 ]

0 голосов
/ 09 мая 2020

Вы можете использовать scanf с такой структурой.

typedef struct {
   char name[1024];
   int age;
   int sex;
}person;

person human;
scanf(" [:^\n],%d,%c",human.name,&human.age,&human.sex);

или вы можете использовать такую ​​структуру

person human;
char c;
int a;
float b;

scanf("%c %d %f",&c,&a,&b);

human.name=c;
human.age=a;
human.sex=b;
0 голосов
/ 10 мая 2020

При использовании 'scanf' вам необходимо сопоставить формат с переменной.

scanf будет иметь дело с именем (char []) и возрастом (int), но вы будете временной переменной для обработки преобразования атрибута 'sex' из char в int.

Также рассмотрите возможность изменения формата - похоже, что ввод разделен запятыми. В этом случае "% [^,]" будет работать.

{
        // Good idea to initialize 'p'.
        person p = {} ;
        char sex ;

        scanf(" %[^,],%d,%c", p.name, &p.age, &sex) ;
        p.sex = sex ;
}
0 голосов
/ 09 мая 2020

Для имени вам нужно использовать c builtin fun c, чтобы делать копии ... другое поле вашей структуры может быть просто назначено

...