田震 2010年01月25日 星期一 08:15 | 1408次浏览 | 2条评论
双重记录了……
我在使用文件函数做一些测试的时候,发现最后的一条记录,在输出的时候,容易变成两条一样的:
最后出现的两条一样的记录……
#include <stdio.h>
struct clientData{
int acctNum;
char firstName[15];
char lastName[10];
double balance;
};
int main(void)
{
int i;
struct clientData blankclient={0,"","",0.0};
FILE *cfPtr;
if((cfPtr=fopen("credit.dat","wb"))==NULL){
printf("Can not open the file");
}
else {
for(i=1;i<=100;i++){
fwrite(&blankclient,sizeof(struct clientData),1,cfPtr);
}
fclose(cfPtr);
}
if((cfPtr=fopen("credit.dat","wb"))==NULL){
printf("Can not open the file");
}
else {
printf("Enter the AcctNum:");
scanf("%d",&blankclient.acctNum);
while(blankclient.acctNum!=0)
{
printf("Enter firsename,lastname,balance:\n");
fscanf(stdin,"%s%s%lf",blankclient.firstName,blankclient.lastName,&blankclient.balance);
fseek(cfPtr,(blankclient.acctNum-1)*sizeof(struct clientData),SEEK_SET);
fwrite(&blankclient,sizeof(struct clientData),1,cfPtr);
printf("Enter AcctNum");
scanf("%d",&blankclient.acctNum);
}
fclose(cfPtr);
}
/*FILE *cfPtr;
struct clientData blankclient={0,"","",0.0};*/
if((cfPtr=fopen("credit.dat","rb"))==NULL){
printf("Can not open the file!");
}
else {
printf("%-6s%-16s%-11s%10s\n","Acct","FirstName","LaseName","Balance");
while(!feof(cfPtr))
{
fread(&blankclient,sizeof(struct clientData),1,cfPtr);
if(blankclient.acctNum!=0)
{
printf("%-6d%-16s%-11s%10.2f\n",blankclient.acctNum,blankclient.firstName,blankclient.lastName,blankclient.balance);
}
}
fclose(cfPtr);
}
return 0;
}
Zeuux © 2024
京ICP备05028076号
回复 曾睿 2010年01月25日 星期一 09:34
回复 田震 2010年01月25日 星期一 09:37