2015-10-04 92 views
-1

我的問題:我不知道如何刪除數組中輸入的最後一個元素。當用戶輸入一個負數時,程序應該停止,並且數組中不應該包含負數。我試過了,但我無法找到解決方案。這是我的代碼:刪除數組中的最後一個元素

int main() { 
float array[20]; 
float max ,min; 
float rem; 
int i; 
char op; 
for (i = 0; i <= 20; i++){ 
     printf("Enter the element inside array[%d]: ",i); 
     scanf("%f", &array[i]); 
     if (array[i] < 0) 
      break; 
} 
printf("Enter ......: "); 
scanf("%s", &op); 

switch (op){ 
    case 'h': 
     max = array[0]; 
     for (i = 0; i < 20; i++){ 
      if (max < array[i]){ 
       max = array[i]; 

      } 
     } 
     printf("The biggest number is: %f\n", max); 
     break; 

    case 'l': 
     min = array[0]; 
     for (i = 0; i < 20; i++){ 
      if (min > array[i]){ 
        min = array[i]; 

      } 
     } 
     printf("The smallest number is: %f\n", min); 
     break; 


} 


return 0; 
} 

請幫忙,我用完了想法。 非常感謝。

+2

這不是C# - 它看起來像只是C. –

+0

Upps srry錯字。 – question

+0

在C中,你需要跟蹤數組或其他緩衝區中實際使用的元素數量。因此,記住這一點,然後「刪除」最後一項就是簡單地將自己的長度變量減一。沒有其他機制是C. – hyde

回答

1

在存儲陣列之前,只需選中輸入的值:

int main() { 
float array[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 
float max ,min; 
float rem; 
int i; 
float a; 
char op; 
for (i = 0; i < 20; i++){ 
     printf("Enter the element inside array[%d]: ",i); 
     scanf("%f", &a); 
     if (a < 0) 
      break; 
     array[i]=a; 
} 
+0

仍然沒有工作。 當我打破它,並輸入H它給了我一個非常長的數字(不正確的數字) 當我輸入'L'時,它給了我0.000,即使我從來沒有輸入0.0作爲數組元素。 – question

+0

您應該初始化數組。我編輯了答案 – Ormoz

+0

@ameyCU我修正了循環變量 – Ormoz

1

之前,使用一個臨時變量,如果是在陣列正店,如果不採取必要的行動。

for (i = 0; i < 20; i++){ 
    printf("Enter the element inside array[%d]: ",i); 
    scanf("%f", &x)  // declare x as float x; 
    if (x< 0)    // if negative break 
     break; 
     array[i]=x;   // store into array 
} 

而且也在你的程序有些問題 -

printf("Enter ......: "); 
scanf("%s", &op);  // op is char variable use %c specifier  
    ^use instead %c 

這樣寫instead-

scanf(" %c", &op); 

造成UB

這個第一循環訪問索引超出界限
for (i = 0;i<=20; i++){ // change condition to i<20 (index can go from 0 to 19) 
    //your code    // as array is declared as float array[20]   
} 

既爲maxmin環可以去這樣 -

for (i= 0;array[i]; i++){   // no need to keep track of length of array 

Click on link to see working code.

+0

當我輸入一個負數時它會中斷,但是當我輸入'l'時,它表明我最小的數字是我輸入的負數 – question

+0

@question是的,這就是爲什麼使用一個臨時變量,所以如果它是負數,它將直接從循環中出來,而不用存儲在數組中。當你的代碼有_undefined behaviour_時,不要忘記進行修改。 – ameyCU

+0

但它應該顯示沒有負數的最小數字。 例如:{1,2,3,4,-5} 最小數字:1不是-5 – question

1

我爲我最後的答案很抱歉,但這是真的。)

#include<stdio.h> 


int length(const float *array) { 
    int count = 0; 
    while(array[count]) count++; 
    return count; 
} 


void main() { 
float array[20]; 
float max ,min; 
float rem,input; 
int i; 
char op; 
int length = 0; 
for (i = 0; i < 20; i++){ 
     printf("Enter the element inside array[%d]: ",i); 
     scanf("%f", &input); 
     if (input < 0) 
      break; 
     length++; 
     array[i] = input; 
} 

printf("Enter ......: "); 
scanf(" %c", &op); 

switch (op){ 
    case 'h': 
     max = array[0]; 
     for (i = 0; i < 20; i++){ 
      if (max < array[i]){ 
       max = array[i]; 

      } 
     } 
     printf("The biggest number is: %f\n", max); 
     break; 

    case 'l': 
     min = array[0]; 
     for (i = 0; i < length; ++i){ 
      if (min > array[i]){ 
        min = array[i]; 

      } 
     } 
     printf("The smallest number is: %f\n", min); 
     break; 


} 

system("pause"); 
} 
+0

你已經發布了幾個答案,只是代碼轉儲,沒有解釋問題或你如何修復它。這些並不是很好的答案,你迫使讀者搜索並比較,找出發生了什麼變化。你能否在將來添加一些解釋性文字? – Blastfurnace

+0

我是新的在stackoverflow。謝謝你的建議。我將在未來增加更多解釋。 – 2015-10-04 19:12:10

相關問題