输入数组,逆序输出,用指针做函数的参数

wander1210840256 2012-01-28 10:39:33
各位大侠们看看我代码有什么错误,输入1 2 3 4,结果总是 1 2 2 4,不知道怎么回事
#include<stdio.h>
int main()
{
void reverse(int *p,int n);
int a[10] ,i,n;

printf("Enter n :");
scanf("%d",&n);

printf("Enter n digits:");
for(i = 0;i < n;i ++)
scanf("%d",&a[i]);

reverse(a,n);
printf("After reverse:");
for(i = 0;i < n; i ++)
printf("%3d",a[i]);

printf("\n");
return 0;

}
void reverse(int *p,int n)
{

int *pj,t,m,*pi;
m = (n - 1) / 2;
pi = p;
pj = p + n - 1;


for(; pi < p +m;pi ++,pj --)
t = *pi;
*pi = *pj;
*pj = t;


}
...全文
367 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
8毛_ 2012-01-28
  • 打赏
  • 举报
回复

#include<stdio.h>
int main()
{
void reverse(int *p,int n);
int a[10] ,i,n;

printf("Enter n :");
scanf("%d",&n);

printf("Enter n digits:"); //printf("Enter %d digits:",n); 这样意图比较明确
for(i = 0;i < n;i ++)
scanf("%d",&a[i]);

reverse(a,n);
printf("After reverse:");
for(i = 0;i < n; i ++)
printf("%3d",a[i]);

printf("\n");
return 0;

}
void reverse(int *p,int n)
{

int *pj,t,m,*pi;
m = (n - 1) / 2;
pi = p;
pj = p + n - 1;


for(; pi < p +m;pi ++,pj --) //for(; pi <=p +m;pi ++,pj --) 小于等于
{ //这里加上大括号
t = *pi;
*pi = *pj;
*pj = t;
}


}

ProgrammingRing 2012-01-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 programmingring 的回复:]

C/C++ code
#include<stdio.h>

int main()
{
void reverse(int *p,int n);
int a[10] ,i,n;

printf("Enter n :");
scanf("%d",&n);

printf("Enter n digits:");
for(i = 0……
[/Quote]
这个错了。。抱歉

#include<stdio.h>

int main()
{
void reverse(int *p,int n);
int a[10] ,i,n;

printf("Enter n :");
scanf("%d",&n);

printf("Enter n digits:");
for(i = 0;i < n;i ++)
scanf("%d",&a[i]);

reverse(a,n);
printf("After reverse:");
for(i = 0;i < n; i ++)
printf("%3d",a[i]);

printf("\n");
return 0;

}
void reverse(int *p,int n)
{

int *pj,t,m,*pi;

m = n / 2; // 改成这个

pi = p;
pj = p + n - 1;

for(; pi < p +m;pi ++,pj --) // 加上大括号
{
t = *pi;
*pi = *pj;
*pj = t;
}

}
ProgrammingRing 2012-01-28
  • 打赏
  • 举报
回复
#include<stdio.h>

int main()
{
void reverse(int *p,int n);
int a[10] ,i,n;

printf("Enter n :");
scanf("%d",&n);

printf("Enter n digits:");
for(i = 0;i < n;i ++)
scanf("%d",&a[i]);

reverse(a,n);
printf("After reverse:");
for(i = 0;i < n; i ++)
printf("%3d",a[i]);

printf("\n");
return 0;

}
void reverse(int *p,int n)
{

int *pj,t,m,*pi;

if(n % 2 == 0) // 加了个if
m = n / 2;
else
m = n / 2 - 1;
pi = p;
pj = p + n - 1;

for(; pi < p +m;pi ++,pj --) // 你源代码没加大括号
{
t = *pi;
*pi = *pj;
*pj = t;
}

}
wander1210840256 2012-01-28
  • 打赏
  • 举报
回复
就差一个大括号,有点纠结,有时写程序用了括号就错了,有时不用括号又错了,以后先加括号试试,不行了再把括号去了试试,谢大侠们了!

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧