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

问题描述 投票:2回答:2

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

假设我有以下内容:

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

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

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

将行存储到记录本身?

c
2个回答
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不会工作。变量和类型名称必须不同。


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
}
© www.soinside.com 2019 - 2024. All rights reserved.