各位大侠们看看我代码有什么错误,输入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;
}
------解决方案--------------------
- 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;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; } }
------解决方案--------------------
------解决方案--------------------
#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;
}
}