【发布时间】:2015-10-15 02:19:34
【问题描述】:
我正在尝试将文本文件“data”的内容复制到名为“raf”的文本文件中。以下是“数据”文件的内容:
30 Clinton,Bill 300.30
50 Carter,Jimmy 500.50
60 Bush,George 60.60
20 Reagan,Ronald 200.20
10 Nixon,Kathy 100.10
40 Bush,Barba 400.40
90 Obama,Barack 900.90
我的目标是获得如下所示的输出:
ID NAME BALANCE
---------------------------------------
10 Nixon,Kathy 100.10
20 Reagan,Ronald 200.20
30 Clinton,Bill 300.30
40 Bush,Barba 400.40
50 Carter,Jimmy 500.50
60 Bush,George 60.60
0 bbbb 0.00
0 bbbb 0.00
90 Obama,Barack 900.90
0 bbbb 0.00
但这就是我实际得到的:
ID NAME BALANCE
---------------------------------------
10 Nixon,Kathy 100.10
20 Reagan,Ronald 200.20
30 Clinton,Bill 300.30
40 Bush,Barba 400.40
50 Carter,Jimmy 500.50
60 Bush,George 60.60
60 Bush,George 60.60
60 Bush,George 60.60
60 Bush,George 60.60
60 Bush,George 60.60
Press any key to continue . . .
这是我目前的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct PERSON
{
int ID;
char name[20];
float balance;
};
void DisplayText(char FullText[]);
void RAF(char *fname);
void DisplayRAF(char *fname);
void CopyText2RAF(char* txtname, char* rafname);
int main()
{
char FullText[500];
printf("Display text file\n\n");
DisplayText(FullText);
RAF("raf.txt");
//printf("\n\n");
//printf("Display after Initializing Randon Access File\n\n");
//DisplayRAF("raf.txt");
printf("\n\nDisplay after Copying text to Random Access File");
CopyText2RAF("data.txt","raf.txt");
printf("\n\n");
DisplayRAF("raf.txt");
printf("\n\n");
system("PAUSE");
return 0;
}
void DisplayText(char FullText[])
{
FILE * fp;
fp = fopen("data.txt","r");
int i;
printf("ID \t NAME \t\t BALANCE \n");
printf("---------------------------------------\n");
for(i=0;i<7; i++)
{
fgets(FullText,500,fp);
printf("%s", FullText);
}
printf("\n");
free(FullText);
fclose(fp);
}
void RAF(char *fname)
{
FILE * f;
struct PERSON p = {0 , "bbbb", 0.0};
// OPEN THE RAF FILE
f = fopen(fname,"wb");
//INITIALIZE THE FILE WITH RECORD p
int i;
for(i=1; i<=10; i++)
{
fwrite((char *)&p,sizeof(p),1,f);
}
fclose(f);
}
void DisplayRAF(char *fname)
{
FILE * f = fopen(fname,"rb");
struct PERSON p;
int i;
printf("ID \t NAME \t\t BALANCE \n");
printf("---------------------------------------\n");
for(i=1; i<=10; i++)
{
fread((char *)&p, sizeof(p),1,f);
printf("%d \t %s \t %.2f \n",p.ID, p.name, p.balance);
}
fclose(f);
}
void CopyText2RAF(char* txtname, char* rafname)
{
FILE * ftxt = fopen(txtname,"r");
FILE * fraf = fopen(rafname,"wb");
//READ FROM TEXT FILE
struct PERSON p;
fscanf(ftxt, "%d %s %f", &p.ID, p.name, &p.balance);
while(! feof(ftxt))
{
int ByteOfText = ((p.ID/10-1)*sizeof(p));
fseek(fraf,ByteOfText, SEEK_SET);
fwrite((char *)&p, sizeof(p), 1, fraf);
fscanf(ftxt, "%d %s %f", &p.ID, p.name, &p.balance);
}
fclose(ftxt);
fclose(fraf);
}
由于某种原因,在我将文本文件复制到 RAF 文件后,显示器只能读取到 ID 60,然后重复直到 for 循环完成。我不明白为什么没有为 ID 70 和 80 打印出 P 初始化的内容。根本不打印 ID 90。相反,它是 ID 60 的信息。任何帮助或建议将不胜感激。
【问题讨论】:
标签: c function text struct randomaccessfile