我需要创建一个只接受每个数字一次的数组,如果用户试图多次插入一个数字,那么他必须输入另一个数字......任何人都可以帮我吗? 到目前为止我试过这个:
#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;
}
但代码不起作用,我不知道为什么
答案 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]);
}
希望这可以帮到你