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

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

#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;
}

1 Ответ

1 голос
/ 07 января 2020

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

Прежде всего, когда вы используете 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 вместо.

...