2017-03-24 217 views
0

好吧我在這裏做錯了什麼?奇怪的陣列輸出

該程序應該讀取20個整數,然後輸出一個不重複的整數數組(每個整數只輸出一次)。

//Program to read 20 integers and return each integer only once (no duplicates). 
#include <stdio.h> 

int main() 
{ 
    int a, b, count=0, temp, array1[20]; 

    printf("Enter 20 array elements between 1 and 10 inclusive\n"); 
    for (a=0; a<20; a++) //Loop to enter 20 elements 
    { 
     scanf("%d", &temp); 
     for (b=0; b<=20; b++) //Loop to test each new element against all previous entered elements 
    { 
     if (array1[b] == temp) //If duplicate increment count 
     { 
      count++; 
     } 
     else if (count == 0 && b == 20) //If there have been no duplicates and 20 numbers have been tested... add entered number to the array 
     { 
      array1[a] = temp; 
     } 
    } 
} 
for (a=0; a<20; a++) 
{ 
    printf("%d\t", array1[a]); 
} 
return 0; 

}

+1

您的輸入是什麼?你看到的輸出是什麼? – skrrgwasme

+0

如果我輸入例如1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,2。我得到的輸出爲:4200256,0,24,0,7344944,0,1,0,-1,-1,4200357,0,1,0,4200,233,0,0,24,0 0 –

+0

@JakeRitter請通過編輯而不是在評論中提出問題中的所有信息。 –

回答

2

這裏有以下錯誤。

  1. 在內部循環中,在第一次檢查期間,您正在比較20個元素。在接收到第一個元素時,您沒有任何要比較的元素。我添加了一個變量size來指示數組的大小。 size初始化爲0。

  2. if (count == 0 && b == 20)應外部的移動來進行循環,並當一個元素被添加到它在array1[size]size加入遞增陣列可以簡化爲if (count == 0)

  3. 您需要在每個外部for循環中重新初始化count,如下所示。

  4. 打印將打印size非重複的元素。

代碼如下。

//Program to read 20 integers and return each integer only once (no duplicates). 
#include <stdio.h> 

int main() 
{ 
    int a, b, count=0, temp, array1[20]; 

    int size = 0; 
    printf("Enter 20 array elements between 1 and 10 inclusive\n"); 
    for (a=0; a<20; a++) //Loop to enter 20 elements 
    { 
     scanf("%d", &temp); 
     count = 0; 
     for (b=0; b<size; b++) //Loop to test each new element against all previous entered elements 
     { 
      if (array1[b] == temp) //If duplicate increment count 
      { 
       count++; 
      } 
     } 
     if (count == 0) //If there have been no duplicates and 20 numbers have been tested... add entered number to the array 
     { 
      array1[size] = temp; 
      size++; 
     } 
    } 
    for (a=0; a<size; a++) 
    { 
     printf("%d ", array1[a]); 
    } 
    return 0; 
} 

此代碼將接受20個元素並存儲和顯示非重複(可以是1-20)的數量。如果你想存儲20個非重複元素(可能輸入20個以上),它可以很容易地修改。

1

您有多個讀取未初始化的變量是不確定的行爲。您也可以訪問超出範圍的數組。

for (b=0; b<=20; b++) 
      ^^ 
      This will result in b in the range [0..20] 
{ 
    if (array1[b] == temp) //If duplicate increment count 
     ^^^^^^^^^ 
     array1[b] is uninitialized 
     and when b is 20 you access out of range 

而且你只寫入陣列時數爲0,b是20

else if (count == 0 && b == 20) 
    { 
     array1[a] = temp; 
    } 

注意,你永遠不重置count所以第一場比賽後,你將永遠不會再次寫入陣列

順便說一句 - 你打印:

Enter 20 array elements between 1 and 10 inclusive 

但你永遠不執行的任何檢查輸入值在該範圍內。