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看起来阿隆·巴伦博伊姆解决了你的问题。如果是这样,请考虑将他的答案标记为接受者回答。