田震

田震的博客

他的个人主页  他的博客

问个C语言的问题

田震  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哲思注册吗?现在 注册 !
曾睿

回复 曾睿  2010年01月25日 星期一 09:34

EOF的结束符不是NULL吧。这个就是关键。

1条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号