Как мы печатаем частично заполненный массив Integer? мы не можем использовать '\ 0' в случае целого числа - PullRequest
0 голосов
/ 18 июня 2019

поэтому я даю пользовательский массив в качестве входных данных, а затем выбираю уникальные числа из этого массива и сохраняю их в другом массиве, но проблема в том, что нет способа узнать размер нового массива.если массив частично заполнен, он напечатает несколько значений мусора.

Я пытался использовать '\ 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 ]

1 голос
/ 18 июня 2019

Все просто.Используйте счетчик:

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);
}
0 голосов
/ 18 июня 2019

Хорошо, поэтому я обнаружил еще одну ошибку в коде: -

 #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]", который я заполнял получение элементов из [n] не заполнялось должным образом.
  • Я использовал b [j] = a [i], когда [j == i]. но во многих случаях j не является линейным.

  • использование другой переменной (которая не пропускает никаких значений, начиная с 0) для заполнения массива b [n], должно исправить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...