我可以在文件中保存结构,例如保存到txt吗?如果可以的话,是否可以重新打开它并获取数据?
也许是这样的:
struct guest
{
int tel;
char name[20];
char country[20];
} ;
int main()
{
record.tel=231231;
strcpy(record.name, "Raju");
record.country= China;
答案 0 :(得分:1)
fprintf(file, "%d %20s %20s\n", record.tel, record.name, record.country);
fscanf(file, "%d %20s %20s\n", &record.tel, &record.name, &record.country);
UPD:如果name
和/或country
可能包含空格,请使用以下内容进行回读:
char blank[1];
fscanf(file, "%d ", &record.tel);
fread(record.name, 20, 1, file);
fread(blank, 1, 1, file); // assert(blank[0] == ' ');
fread(record.country, 20, 1, file);
fread(blank, 1, 1, file); // assert(blank[0] == '\n');
答案 1 :(得分:1)
您描述的功能称为序列化
互联网上有很多信息。
对于前参考:
Data serialization in C?
答案 2 :(得分:1)
基本上你可以。你有两个选择。
1)作为不可移植的二进制文件。
// Writing to a file inticaded by fp ...
fwrite( &record, sizeof(struct guest), 1, fp );
// Reading from a file inticaded by fp ...
fread( &record, sizeof(struct guest), 1, fp );
2)作为便携文本。
// Writing to a file inticaded by fp ...
fprintf( fp, "%d %20s %20s", record.tel, record.name, record.country );
// Reading from a file inticaded by fp ...
fscanf( fp, "%d %s %s", &record.tel, &record.name, &record.country );
使用第一选择(二进制),您可以直接从文件中读取,查看示例here,如果将其另存为文本,则必须逐行读取并在字段中手动提供值结构。
答案 3 :(得分:1)
如果是您第一次使用fprintf() / fscanf()
而不是printf() / scanf()