Я пишу программу, которая удалит повторяющиеся числа в массиве. Передал массив через функцию с помощью указателя

Это функция, которая удалит повторяющиеся числа:

#include<stdio.h>
#include<conio.h>
int del(int *,int);
void main(){
    int s[5], i=0;
    clrscr();
    printf("Enter: ");
    for(i=0;i<5;i++)
        scanf("%d",s[i]);
    del(&s[0],5);
    for(i=0;i<5;i++)
        printf("%d",s[i]);
    getch();    
}

Я думаю, что это какая-то ошибка, я не получаю никаких ошибок в компиляторе, но на выходе все "0".

int del(int *s, int n)

{
int i = 0,j=0;
for(i=0;i<n;i++)
 {
 for(j=0;j<n;j++)
     {
     if(*(s+i)==*(s+j))
          {
          *(s+j) = 0;
          }
     }
 }
return s;
}


person Supreet Singh    schedule 07.01.2020    source источник
comment
Вы присваиваете ноль, а не удаляете. Что вы подразумеваете под удалить?   -  person Lxer Lx    schedule 07.01.2020
comment
@SupreetSingh Похоже, Алон Баренбойм решил вашу проблему. Если это так, рассмотрите возможность пометить его ответ как ответ принимающего.   -  person Eyal Golan    schedule 15.03.2020


Ответы (1)


У вас есть несколько проблем с вашим кодом.

Прежде всего, когда вы используете scanf, вы должны дать ему указатель, а не переменную, поэтому вам нужно добавить символ '&' перед именем вашей переменной, чтобы он отправил ей адрес.

scanf("%d",&s[i]);

Во-вторых, когда вы перебираете свой массив целых чисел, вы используете вложенные циклы, и это здорово, но вы начинаете со сравнения *(s+0) с *(s+0), поскольку 'i' и 'j' инициализируются нулями.

Таким образом, второе исправление будет установлено как «j» равным «i + 1», а не 0:

int del(int *s, int n)

{
int i = 0,j=0;
for(i=0;i<n;i++)
 {
 for(j=i+1;j<n;j++)
     {
     if(*(s+i)==*(s+j))
          {
          *(s+j) = 0;
          }
     }
 }
return *s; //(return an integer, not a pointer)
}

Теперь вы всегда будете сравнивать различные числа из вашего массива.

Третье и последнее: ваша функция 'del' должна возвращать целое число (именно так вы ее объявили), но вы возвращаете 's' в конце, и это int* (указатель на целое число). return *s вместо этого.

person Alon Barenboim    schedule 07.01.2020