我想创建一个类似这样的代码。
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语言很陌生。
对于name,你需要使用c内建的func来进行复制......你的结构的其他字段可以直接进行分配
你可以用 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;
当使用'scanf'时,你需要将格式与变量相匹配。
在使用'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 ;
}