我第一次在这里问了一个问题。首先是代码:
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
等等......
关于如何让它发挥作用的任何想法。我没有发布整个程序,因为我不想完成我的主题。但如果你需要,请告诉我。
答案 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缺失。