初级代码,编译不过去!
题目为:在一个主函数中输入10个等长的字符串,用另一函数对他们进行排序,然后在主函数中输出这10个已经排好的字符串。
#include <stdio.h>
#include <string.h>
#define N 10
void main ()
{
void compare(char (*pa)[N]);
char a[N][N];
char (*pa)[N]=*a;
int i;
printf ("please enter string!\n");
for (i=0;i<N;i++,pa++)
gets(pa);
compare(pa);
pa=*a;
for (i=0;i<N;i++,pa++)
puts(pa);
}
void compare(char (*pa)[N])
{
int i,j;
char s[N];
for (i=0;i<N;i++)
for (j=1;j<N;j++)
{
if (strcmp(*(pa+i),*(pa+j)<0)
{
strcpy(s,*(pa+i));
strcpy(*(pa+i),*(pa+j));
strcpy(*(pa+j),s);
}
}
}
[解决办法]
- C/C++ code
#include <stdio.h>#include <string.h>#define N 10void main (){ void compare(char (*pa)[N]); char a[N][N]; char (*pa)[N]=a; int i; printf ("please enter string!\n"); for (i=0;i<N;i++,pa++) gets((char*)pa); compare(pa); pa = a; for (i=0;i<N;i++,pa++) puts((char*)pa);}void compare(char (*pa)[N]){ int i,j; char s[N]; for (i=0;i<N;i++) for (j=1;j<N;j++) { if (strcmp(*(pa+i),*(pa+j))<0)//主要是这里少了一个) { strcpy(s,*(pa+i)); strcpy(*(pa+i),*(pa+j)); strcpy(*(pa+j),s); } }}
[解决办法]
#include <stdio.h>
#include <string.h>
#define N 10
void main ()
{
void compare(char (*pa)[N]);
char a[N][N];
char (*pa)[N]=*a;
int i;
printf ("please enter string!\n");
for (i=0;i<N;i++,pa++)
gets(pa);
printf ("After sort:\n");
pa=*a; //传参之前应该赋值,你是在函数执行后赋值的,所以传的地址不是串首地址
compare(pa);
for (i=0;i<N;i++,pa++)
puts(pa);
}
void compare(char (*pa)[N])
{
int i,j;
char s[N];
for (i=0;i<N;i++)
for (j=i+1;j<N;j++)
{
if (strcmp(*(pa+i),*(pa+j))>0)
{
strcpy(s,*(pa+i));
strcpy(*(pa+i),*(pa+j));
strcpy(*(pa+j),s);
}
}
}