2013-05-05 56 views
-2
system("cls"); 
      another = 'y'; 
      while(another == 'y') 
      { 
       printf("\nEnter name of employee to delete "); 
       scanf("%s",empname); 
       ft = fopen("Temp.dat","wb"); 
       rewind(fp); 
       while(fread(&e,recsize,1,fp) == 1) 
       { 
        if(strcmp(e.name,empname) != 0) 
        { 
         fwrite(&e,recsize,1,ft); 
        } 
       } 
       fclose(fp); 
       fclose(ft); 
       remove("EMP.DAT"); 
       rename("Temp.dat","EMP.DAT"); 
       fp = fopen("EMP.DAT", "rb+"); 
       printf("Delete another record(y/n)"); 
       another = getche(); 
      } 

这是一个代码中删除从二进制文件中使用员工姓名在c中的条目!但是当我想删除它的emp ID它不会删除条目,但删除文件的所有内容!错误删除二进制文件中的条目

case '4': 
      system("cls"); 
      another = 'y'; 
      while(another == 'y') 
      { 
       printf("\nEnter employee id to delete "); 
       scanf("%d",&empid); 
       ft = fopen("Temp.dat","wb"); 
       rewind(fp); 
       while(fread(&e,recsize,1,fp) == 1) 
       { 
        if(e.userid!=empid) 
        { 
         fwrite(&e,recsize,1,ft); 
        } 
       } 
       fclose(fp); 
       fclose(ft); 
       remove("EMP.DAT"); 
       rename("Temp.dat","EMP.DAT"); 
       fp = fopen("EMP.DAT", "rb+"); 
       printf("Delete another record(y/n)"); 
       another = getche(); 
      } 
+0

v可定义'e','empname'和'empid'的定义? – 2013-05-05 11:59:53

+1

只是猜测:你的'case'4''接着是擦除命令,并且在case'4''的末尾忘记了'break'。 – 2013-05-05 12:05:16

+0

@AdamLiss e是一个对象,empname是char和empid是int – 2013-05-05 12:06:41

回答

0

我认为scanf("%d", empid);是错误的。如果它被定义为int empid;你应该得到至少一个编译警告:

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat] 

阅读的整数。正确的方法是:

scanf("%d", &empid); 
      ^

如果empid定义为char*char[]你在将其与员工ID进行比较时,应使用atoi()将期望的ID转换为整数:

if(e.userid!=atoi(empid)) 
+0

没有emp ID被定义为int,并把&正在作出相同的问题 – 2013-05-05 12:03:45

+0

问题是否仍然发生,或者你编辑你的问题后解决它吗? ? – 2013-05-05 12:05:38

+0

是的,我编辑它上面,但仍然是同样的问题!我可以邮寄源代码 – 2013-05-05 12:10:30

0

scanf函数采用一个格式字符串,随后地址目标变量的。因此,假设您已经定义empidint,你需要改变

scanf("%d",empid); 

scanf("%d", &empid); 

你没看见的问题,即按名称删除代码,因为empname是已经是指向字符的指针。你确实记得给它分配内存吧?

+0

做到了这一点,同样的问题..还是der – 2013-05-05 11:58:56