如何使用c将结构中的数据放入文本文件?
How to put data in structure into text file using c?
假设我有一个结构,它看起来像这样:
struct profile {
char firstName[15], lastName[15];
int age, phoneNo;
};
我有这样的代码
int main()
{
FILE *fPtr;
fPtr=fopen("profile.txt", "w");
printf("\n\nPlease enter your details:");
struct profile c;
printf("\n\nEnter your first name: ");
gets(c.firstName);
printf("\nEnter your last name: ");
gets(c.lastName);
printf("\nEnter your age: ");
scanf("%d", &c.age);
printf("Enter your phone number: ");
scanf("%d", &c.phoneNo);
fclose(fPtr);
return 0;
}
如何将此结构中的数据放入文本文件中,以便将来能够搜索特定的配置文件?另外,我对 C 还很陌生,所以如果有人能向我解释这是否可行以及如何实现,我将不胜感激。
将字符串打印到文件时,请务必记住字符串终止符 '[=13=]'
会导致某些内容无法显示。所以你应该避免一个一个地写字符串。
另一个可能的问题是,使用 fwrite
将整数写入……作为整数,这意味着它使用包含实际值的 4 个字节进行存储。例如,值 72 将存储为
0x48 0x00 0x00 0x00
将显示字母 H
后跟三个空字符。所以你还必须将数字显示为字符串。
我建议使用 fprintf
。它的工作方式类似于 printf
,但它写入文件而不是 stdout
。在下面的示例中,每个字段都写在不同的行中,并且双换行符结束当前记录:
fprintf (fPtr, "%s\n%s\n%s\n%s\n%d\n%d\n\n",
firstName, lastName, custID,
healthHistory, age, phoneNo);
注意: gets
已弃用,因为它不执行任何字符串长度检查。因此,例如,如果您提供 firstName
20 个字符长,超出的字符将超出该字段的大小并覆盖下一个。请记住,大小为 N 的 char 数组最多包含一个字符串 N-1
个字符长(字符串终止符需要一个)。
我建议改用 fgets
:
fgets (c.firstName, 15, stdin);
最多读取 15 个字符,包括 字符串终止符(并包括从命令行发送的尾随换行符以终止输入。您将有 to remove it 以防万一你不需要它)。
假设我有一个结构,它看起来像这样:
struct profile {
char firstName[15], lastName[15];
int age, phoneNo;
};
我有这样的代码
int main()
{
FILE *fPtr;
fPtr=fopen("profile.txt", "w");
printf("\n\nPlease enter your details:");
struct profile c;
printf("\n\nEnter your first name: ");
gets(c.firstName);
printf("\nEnter your last name: ");
gets(c.lastName);
printf("\nEnter your age: ");
scanf("%d", &c.age);
printf("Enter your phone number: ");
scanf("%d", &c.phoneNo);
fclose(fPtr);
return 0;
}
如何将此结构中的数据放入文本文件中,以便将来能够搜索特定的配置文件?另外,我对 C 还很陌生,所以如果有人能向我解释这是否可行以及如何实现,我将不胜感激。
将字符串打印到文件时,请务必记住字符串终止符 '[=13=]'
会导致某些内容无法显示。所以你应该避免一个一个地写字符串。
另一个可能的问题是,使用 fwrite
将整数写入……作为整数,这意味着它使用包含实际值的 4 个字节进行存储。例如,值 72 将存储为
0x48 0x00 0x00 0x00
将显示字母 H
后跟三个空字符。所以你还必须将数字显示为字符串。
我建议使用 fprintf
。它的工作方式类似于 printf
,但它写入文件而不是 stdout
。在下面的示例中,每个字段都写在不同的行中,并且双换行符结束当前记录:
fprintf (fPtr, "%s\n%s\n%s\n%s\n%d\n%d\n\n",
firstName, lastName, custID,
healthHistory, age, phoneNo);
注意: gets
已弃用,因为它不执行任何字符串长度检查。因此,例如,如果您提供 firstName
20 个字符长,超出的字符将超出该字段的大小并覆盖下一个。请记住,大小为 N 的 char 数组最多包含一个字符串 N-1
个字符长(字符串终止符需要一个)。
我建议改用 fgets
:
fgets (c.firstName, 15, stdin);
最多读取 15 个字符,包括 字符串终止符(并包括从命令行发送的尾随换行符以终止输入。您将有 to remove it 以防万一你不需要它)。