C:如何从.txt文件中正确输出struct?

时间:2013-02-25 00:56:37

标签: c

我第一次在这里问了一个问题。首先是代码:

void displayCompanyInfo(STAFF  e[], int *s)
{
    FILE *payRoll;
    int i = 0;
    int rosterNumber [100];
    int count = 1;

    if ((payRoll = fopen("payRoll.txt", "r")) == NULL)
    {
        perror ("error");
        exit (0);
    }

    cls;

    while (fgets(e[i].name,  sizeof(e[i].name), payRoll) != NULL)
    {
        printf ("Record %i: ", count++);
        printf("%s\n", e[i].name);
    }

    fclose(payRoll);
    printf("\n\n");
    pause;
    cls;

} // end of display

基本上这段代码可行。但是,当文本文件显示时,它显示如下:

记录1:姓名:blah
记录2:年龄:23​​
记录3:每小时费率:34

相反,我希望它按如下方式阅读:

记录1:姓名:Blah
          年龄:23​​岁           每小时收费:34

记录2:姓名:Blah2
          年龄:24岁           每小时收费:35

等等......

关于如何让它发挥作用的任何想法。我没有发布整个程序,因为我不想完成我的主题。但如果你需要,请告诉我。

2 个答案:

答案 0 :(得分:2)

对于这种情况,您必须使用二进制文件处理。使用文本文件是不可能的。 您必须以字节的形式读取,写入数据块并相应地处理它以检索您的结构。

struct e { char name [20], 年龄, int hourly_rate };

这种结构将需要 20(名称)+ 4(年龄)+ 4(hourly_rate)个字节。然后你应该在二进制文件中一次写28个字节并相应地检索28个字节,这在文本文件的情况下是不可能的。因为文本文件考虑了所有的东西作为字符,比如age = 23,它将age字段视为2个字节,如果age = 3,则将其视为1个字节。但是二进制文件将两个字符视为4个字节,即实际的整数大小。

因此,您的问题的解决方案是二进制文件处理。

答案 1 :(得分:1)

问题是循环将每一行视为记录。相反,记录应该是3行。所以在循环中阅读3件事 - 在printf之前添加2缺失。