2013-05-05 58 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