只接受一次数字的数组(代码不起作用)

时间:2013-12-14 17:38:55

标签: c arrays

我需要创建一个只接受每个数字一次的数组,如果用户试图多次插入一个数字,那么他必须输入另一个数字......任何人都可以帮我吗? 到目前为止我试过这个:

#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 个答案:

答案 0 :(得分: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循环,但这不是问题所在。)

答案 1 :(得分: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]);
}

希望这可以帮到你