【问题标题】:How to put data in structure into text file using c?如何使用c将结构中的数据放入文本文件?
【发布时间】:2021-02-01 13:48:44
【问题描述】:

假设我有一个结构,它看起来像这样:

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 非常陌生,所以如果有人能向我解释这是否可行以及如何实现,我将不胜感激。

【问题讨论】:

    标签: c file struct text-files structure


    【解决方案1】:

    将字符串打印到文件时,请务必记住字符串终止符'\0' 将导致无法显示的内容。所以你应该避免一个一个地写字符串。

    另一个可能的问题是,使用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需要)。

    【讨论】:

    • 这有帮助。非常感谢你,祝你有美好的一天! :) 你知道如何删除尾随的新行吗?
    • @cmy 当然!无需重新发明轮子:只需阅读这篇精彩的 answer。我也会编辑我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多