C 我正在写一个程序,将删除数组中重复的数字。使用指针通过函数传递数组

C 我正在写一个程序,将删除数组中重复的数字。使用指针通过函数传递数组,c,turbo-c,C,Turbo C,这是删除重复编号的功能: #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++)

这是删除重复编号的功能:

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


您的代码有一些问题

首先,当您使用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*指向整数的指针。返回*s。

您正在分配零,而不是删除。“删除”是什么意思?@superetsingh看起来阿隆·巴伦博伊姆解决了你的问题。如果是这样,请考虑将他的答案标记为接受者回答。