读书人

初级代码编译不过去!该如何解决

发布时间: 2012-03-18 13:55:39 作者: rapoo

初级代码,编译不过去!
题目为:在一个主函数中输入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);
}
}
}

读书人网 >C语言

热点推荐