我正在尝试使用以下代码从数组中删除负数。不幸的是,没有得到结果。它只是反复打印第一个元素。有人可以告诉我哪里出错了吗?
#include <stdio.h>
void removenegative(int a[],int *p, int *q);
int main()
{
int a[] = {2, 3, -5, -7, 6, 9};
int i;
int *p, *q;
p = a;
q = a+6-1;
removenegative(a, p,q);
for(i=0;i<6;i++)
{
printf("%2d", *p);
}
printf("\n");
}
void removenegative(int a[],int *p, int *q)
{
int *x;
x= &a[0];
while (p<=q)
{
if (*p>=0)
{
*x = *p;
x++;
}
p++;
}
for( ; x<=q; x++)
{
*x = -1;
}
}
答案 0 :(得分:4)
for(i=0;i<6;i++)
{
printf("%2d", *p);
}
您没有更改p
!
答案 1 :(得分:4)
您只打印一个值:
printf("%2d", *p);
在for
循环之前执行此操作:
p = a;
并在循环内添加p++
;
答案 2 :(得分:4)
它只是反复打印第一个元素
当然是这样......
for(i=0;i<6;i++)
{
printf("%2d", *p);
}
您始终打印* p,即[0]
答案 3 :(得分:2)
变化:
printf("%2d", *p);
为:
printf("%2d", a[i]);
您正在循环i
,但没有使用它。
答案 4 :(得分:1)
您的代码是正确的:
void removenegative(int a[],int *p, int *q)
{
int *x;
x= &a[0]; // let x point to the first thing in a
while (p<=q) // continue while p points to an address before q
{
if (*p>=0) // if the thing pointed to by p is greater than zero...
{
*x = *p; // copy from p to x, increment x
x++;
}
p++; // increment p
}
for( ; x<=q; x++) // while x is less than q...
{
*x = -1; // fill in -1
}
}
因此x
是一个递增的写指针,而p
扫描数组,q
充当数组结束标记。
因为我在打字时打了个骂,你的输出程序是不正确的。