【问题标题】:Create a struct name with a given string in C language用 C 语言创建具有给定字符串的结构名称
【发布时间】:2020-08-25 01:22:01
【问题描述】:

我想创建一个执行以下操作的代码:

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 语言很陌生。

【问题讨论】:

    标签: c string struct visual-studio-code scanf


    【解决方案1】:

    对于名称,您需要使用 c builtin func 进行复制...您的结构的其他字段可以直接分配

    【讨论】:

      【解决方案2】:

      你可以像这样使用带有结构的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;
      

      【讨论】:

      • 但是如果我想把它存储在一个哈希表中,那总是一样的吗?
      • 我编辑了答案,也许有帮助,但是c中没有简单的哈希表cod,你可以查看this
      【解决方案3】:

      使用 '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 ;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-14
        相关资源
        最近更新 更多