我知道C中的struct是一个数据集合,但我不确定我是否可以通过以下方式操作它: -
假设我有以下内容:
typedef struct {
char id[IDSIZE];
name name;
int score;
} record;
如果我想记录数据,我可以简单地使用一行:
sscanf(line, "%s %s %d", &record);
将行存储到记录本身?
答案 0 :(得分:3)
record
是您的类型名称。与int
或char
一样。所以你必须声明一个record
类型的变量。
record currentRecord;
sscanf
每个格式标记需要一个变量地址
sscanf(line, "%s %s %d", ¤tRecord); //Fail
sscanf(line, "%s %s %d", ¤tRecord.id, ¤tRecord.name, ¤tRecord.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
}