C语言remove和rename函数不起作用

代码前面部分结果正确但是最后的删除和更名操作不执行 使用的是dev c++


void detectbook()
{
    system("cls");
    FILE *fp,*fp1,*fp2;
    char dname[20];
    char ISBN[20],name[20],author[20],pr[20],pt[20];
    double price;
    int n,r,i,a,flag2=1;
    fp=fopen("book1.dat","r");
    fp1=fopen("book1.dat","r");
    fp2=fopen("book2.dat","w");
    printf("请输入要删除图书的名字:\n");
    scanf("%s",dname);
    n=booknum();
    for(a=1;a<=n;a++)
    {
        fscanf(fp,"%s%s%s%s%s%lf",&ISBN,&name,&author,&pr,&pt,&price);
        if(!strcmp(name,dname))
        {
            flag2=0; 
            break;
        }
    }
    fclose(fp);
    if(flag2==1)
    {
        printf("未找到所要删除图书!\n");
        fclose(fp1);
        fclose(fp2);
        remove("book2.dat");
    }
    else
    {
        printf("确认删除请按1,取消请按0\n");
        scanf("%d",&i);
        for(;i!=0&&i!=1;)
        {
            printf("确认删除请按1,取消请按0\n");
            scanf("%d",&i);
        }
        if(i==0)
        {
            printf("图书删除失败\n");
            fclose(fp1);
            fclose(fp2);
            remove("book2.dat");
        }
        else
        {
            n=booknum();
            for(r=1;r<=n;r++)
            {
                fscanf(fp1,"%s%s%s%s%s%lf",ISBN,name,author,pr,pt,&price);
                if(strcmp(dname,name))
                {
                    fprintf(fp2,"%s %s %s %s %s %0.2lf\n",ISBN,name,author,pr,pt,price);
                }
            }
            printf("图书删除成功\n");
            fclose(fp1);
            fclose(fp2);
            remove("book1.dat");
            rename("book2.dat","book1.dat");
        }
    }
    system("pause");
}


int r = remove("book1.dat");
if(r==0)
    printf("remove error!");
你测试一下,看看输出错误没