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



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

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

这很简单。使用计数器:

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 integern");
    exit(1);
}
好的,

所以我在代码中发现了另一个错误:-

 #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] 应该更正代码。

相关内容

最新更新