2017-10-15 125 views
-3

我想知道如何使用遞減刪除以前輸入的信息。

   case 4: printf("Remove Employee\n"); 
        printf("===============\n"); 
        do{ 
         printf("Enter Employee ID: "); 
         scanf("%d", &number); 
         int i; 
         for(i=0;i<NOE; i--){ 
           if(number == emp[i].Int_Num){ 

            printf("Employee %d will be removed", emp[i].Int_Num); 
            // for(i=0;i<NOE; i++){ 


            -- emp[i].Int_Num, --emp[i].Salary, --emp[i].Age; 
           // scanf("%11lf", &emp[i].Salary); 
            flag = 1; 
            break; 
+1

你想從數組中刪除僱員結構? –

+1

請提供[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve) –

+0

..或者只是將條目標記爲「未使用」?你沒有提供任何系統細節或任何數據類型信息,只是一些代碼和要求;( –

回答

0

元素數量變化頻繁,按任意順序的典型數據結構是鏈表。 (或者,如果您需要更快的訪問權限並且擁有像您的員工編號這樣的訂單標準,則可以使用排序樹)。您將使用malloc()分配新元素(此處爲員工),並使用free真正將其從內存中移除。

或者,如果有一個已知的最大數量的員工,並且您有足夠的內存,則可以使用您在此顯示的數組。數組中元素的數量將是員工的預期最大數量;因此該程序總是需要最大量的內存,即使只有很少的員工。另一方面,程序的內存佔用空間在編譯時是靜態的,這可能是一個優點。

無法更改數組中元素的數量(除非動態分配整個數組並在需要時重新分配)。正如Bo Persson所說,增加新員工或刪除現有員工將通過正在使用的元素的標記完成。這可能是一個額外的布爾標誌,或者是其中一個現有字段中的特殊值。

實際上,雖然您將以這種方式編程您自己的原始動態內存管理,但將該陣列用作「競技場」。它可能會比使用內置的更麻煩,速度更慢。