C 国家名称排序 再次提问请高手回答

来源:百度知道 编辑:UC知道 时间:2024/05/11 14:11:47
C语言实现对键盘输入的国家名称排序,不限定国家数目
#include<string.h>
#define N 200
main()
{
int i,j;
char con[N][20],temp[20];

for(i=0;i<=N || getchar()!='\0';i++)
con[i][20]=gets();
for(i=0;i<N-1;1++)
for(j=0;j<=N-i-1;j++)
if(strcmp(con[j][20],con[j+1][20])>0)
{ temp[20]=con[j][20];
con[j][20]=con[j+1][20];
con[j+1][20]=temp[20]; }
for(i=0;i<=N;i++)
printf("%s",con[i][20]);
}
if(strcmp(con[j][20],con[j+1][20])>0)
为什么这一句出现错误?

char con[N][20]中的con[N][20]是什么?
这一句声明了一个变量,它是一个含N个字符串的数组,或者看成N行20列的字符(不是字符串)矩阵(或者说是2维数组)。

con[j][20]是什么?
是数组con的第j行,第20列的元素,类型是char,它是一个字符,而不是一个字符串。

同理,不用解释con[j+1][20]了。

strcmp函数接受两个参数,每个参数都是char*(字符指针)型,因此将char类型传递给strcmp将导致编译错误。

===============================

这里,con[j]是一个字符串(或者称为字符数组),他的类型是char*,因此可以用来作为strcmp的参数。

因此源代码中很多地方都是错误的,也许赋值可以成立,但是是违背程序愿意的。

另外,temp[20]的写法并不是代表temp这个数组,而是代表temp的第20+1个元素,因此将导致数组越界错误。

同理,printf("%s",con[i][20]); 的写法也是错误的,con[i][20]应该对应%c而不是%s。

……

等等等等,类似错误不一一列举了……