2013-12-14 26 views
-4

我需要創建一個接受每個數字一次的數組,並且如果用戶嘗試多次插入一個數字,那麼他必須輸入另一個數字。 ..任何人都可以幫助我嗎? 到目前爲止,我已經試過這樣:數組只接受一次數字(代碼不起作用)

#include<stdio.h> 
#include<stdlib.h> 

int main(void) 
{ 
    int a[5]; 
    int i,j,num; 

    scanf("%d",&num); 
    a[0]=num; 

    for(i=1;i<5;++i){ 
     again: scanf("%d",&num); 
     if(a[i]!=a[i-1]) 
      a[i]=num; 
     else 
      goto again; 
    } 
    for(i=0;i<5;i++) 
     printf("%4d\n",a[i]); 
    system("pause"); 
    return 0; 
} 

但代碼只是不工作,我不知道爲什麼

+2

接受的值只有一次通常被稱爲一組數組。 –

+1

不要在標題中指定語言。把它放在標籤中。 –

+0

這段代碼有什麼問題?請明確點。 –

回答

0

它是從你的代碼觀察到給定的數組必須填寫,但它不應該包含多餘的值。

下面的代碼迭代,直到數組被填充沒有冗餘值,一旦數組被填充它終止。

int a[5],i=1,k=0,p; 
int num; 
scanf("%d",&num); 
a[0]=num; 
while(i<5) 
{ 
    scanf("%d",&num); 
    for(p=0;p<=k;p++) 
    { 
     if(a[p]==num) 
     { 
      break; 
     } 

     if(p==(k)) 
     { 

      a[i]=num; 
      k=i; 
      i++; 
     } 
    } 


} 


for(i=0;i<5;i++) 
{ 
    printf("%d",a[i]); 
} 

希望能幫助您

0

你只是比較前一個在a[i]!=a[i-1]新輸入的值。

你最好創建一個函數只是測試值後,以測試與整個陣列的新的價值,像

int valueExists(int num, int a[], int len) { 
    int i; 
    for (i = 0; i < len; i++) { 
     if (a[i] == num) { 
      return 1; 
     } 
    } 
    return 0; 
} 

確保你添加新的值到數組是不存在的。

again: scanf("%d",&num); 
if (valueExists(num, a, i)) { 
    goto again; 
} else { 
    a[i] = num; 
} 

(你與goto創建的循環可以通過do代替 - while循環,但這不是這裏的問題)