我们如何打印部分填充的Integer数组?我们不能在整数的情况下使用'\ 0'

时间:2019-06-18 03:15:40

标签: c

所以我给用户定义的数组作为输入,然后挑选出该数组中的唯一数字并将其存储到另一个数组中,但问题是无法知道新数组的大小。如果数组被部分填充,它将打印一些垃圾值。

我尝试使用'\ 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

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;
 }
  • 问题是我正在填充的另一个数组“ b [n]” 从a [n]中提取元素没有正确填充。
  • 当[j == i]时,我正在使用b [j] = a [i]。但是j在很多情况下不是线性的。

  • 使用另一个变量(不会跳过任何从0开始的值)填充数组b [n]应该会更正代码。