0

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

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

等等...

关于如何让它发挥作用的任何想法。我没有发布整个程序,因为我不想过度执行我的线程。但是,如果您需要它,请告诉我。

4

2 回答 2

2

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

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

此结构将需要 20(name) + 4(age) + 4(hourly_rate) 字节。然后您应该在二进制文件中一次写入 28 个字节并相应地检索 28 个字节,这在文本文件的情况下是不可能的。因为文本文件将所有事物视为字符,例如 age=23 它将年龄字段视为 2 个字节,如果 age=3,则将其视为 1 个字节。但二进制文件将这两个事物视为 4 个字节,这是整数的实际大小。

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

于 2013-02-25T04:41:00.423 回答
1

问题是循环将每一行视为一条记录。相反,一条记录应该是 3 行。因此,请在循环中阅读 3 件事 - 在 printf 之前添加 2 个缺失的内容。

于 2013-02-25T01:08:42.083 回答