在C中使用struct的正确方法是什么?

时间:2018-03-03 19:13:25

标签: c

我知道C中的struct是一个数据集合,但我不确定我是否可以通过以下方式操作它: -

假设我有以下内容:

typedef struct { 
    char id[IDSIZE];
    name name;
    int score;
} record;

如果我想记录数据,我可以简单地使用一行:

sscanf(line, "%s %s %d", &record);

将行存储到记录本身?

2 个答案:

答案 0 :(得分:3)

record是您的类型名称。与intchar一样。所以你必须声明一个record类型的变量。

record currentRecord;

sscanf每个格式标记需要一个变量地址

sscanf(line, "%s %s %d", &currentRecord); //Fail
sscanf(line, "%s %s %d", &currentRecord.id, &currentRecord.name, &currentRecord.score); //This will work only if name is type of char*

name name无法工作。变量和类型名称必须不同。

答案 1 :(得分:2)

The answer by JD已经指出了问题以及如何解决这些问题。我不会在这里重复它们来解决这个问题。

我的建议是创建几个函数:

int sscanf_record(char str[], record *rec)
{
   int n = sscanf(str, "%s %s %d", rec->id, rec->name, &(rec->id));
   if ( n == EOF )
   {
      return n;
   }
   return ( n == 3 ? 1 : 0);
}

int fscanf_record(FILE* fptr, record *rec)
{
   int n = fscanf(fptr, "%s %s %d", rec->id, rec->name, &(rec->id));
   if ( n == EOF )
   {
      return n;
   }
   return ( n == 3 ? 1 : 0);
}

然后,在我们的其余代码中,您可以使用这些函数,而不必重复细节。

record myrecord;
if ( sscanf_record(line, &myrecord) != 1 )
{
   // Problem. Deal with it.
}
else
{
   // Use the data
}