所以我给用户定义的数组作为输入,然后挑选出该数组中的唯一数字并将其存储到另一个数组中,但问题是无法知道新数组的大小。如果数组被部分填充,它将打印一些垃圾值。
我尝试使用'\ 0',但后来发现它只能在“字符数组”的情况下使用。 接下来,我尝试使用“ sizeof”,但仍然没有结果。 “ sizeof”正在存储数组的最大大小。
#include<stdio.h>
int main()
{
int n;
printf("Enter The Size Of Array: ");
scanf("%d",&n);
int a[n],b[n];
int i;
printf("Enter The Elements Of The Array:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
int j;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
{
break;
}
}
if(j==i)
{
b[j]=a[i];
}
}
printf("\nUnique Numbers Are: ");
for(i=0;i<n;i++)
{
printf("%d ",b[i]);
}
printf("\n");
return 0;
}
结果:-
Enter The Size Of Array: 10
Enter The Elements Of The Array: 5 4 3 1 2 3 5 3 2 4
Unique Numbers Are: 5 4 3 1 2 32627 896 0 -919050752 32767
预期结果:-
Enter The Size Of Array: 10
Enter The Elements Of The Array: 5 4 3 1 2 3 5 3 2 4
Unique Numbers Are: 5 4 3 1 2
答案 0 :(得分:1)
很简单。使用计数器:
int main()
{
int n;
printf("Enter The Size Of Array: ");
scanf("%d",&n);
int a[n],b[n];
int i;
int noDups=0; // Init counter
printf("Enter The Elements Of The Array:\n");
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
}
for(i=0;i<n;i++) {
int j;
for(j=0;j<i;j++) {
if(a[i]==a[j])
break;
}
if(j==i) {
b[j]=a[i];
noDups++; // Increment counter
}
}
printf("\nUnique Numbers Are: ");
for(i=0; i<noDups ;i++) { // Loop noDups number of times
printf("%d ",b[i]);
}
printf("\n");
return 0;
}
但是不要忘记检查scanf
的返回值。这样完成:
if(scanf("%d",&a[i]) != 1) {
fprintf(stderr, "Error reading integer\n");
exit(1);
}
答案 1 :(得分:0)
好的,所以我发现代码中还有一个错误:-
#include<stdio.h>
int main()
{
int n;
printf("Enter The Size Of Array: ");
scanf("%d",&n);
int a[n],b[n];
int i;
int p=0;
printf("Enter The Elements Of The Array:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
int j;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
{
break;
}
}
if(j==i)
{
b[p]=a[i];
p++;
}
}
printf("\nUnique Numbers Are: ");
for(i=0;i<p;i++)
{
printf("%d ",b[i]);
}
printf("\n");
return 0;
}
当[j == i]时,我正在使用b [j] = a [i]。但是j在很多情况下不是线性的。
使用另一个变量(不会跳过任何从0开始的值)填充数组b [n]应该会更正代码。