输入五个国家的名字,按字母顺序(即ASCII码)从小到大的顺序排列输出,我程序错在哪里?求高手帮忙

#include<stdio.h>
struct Name{
char name[8];
};

void main()
{
struct Name NAME[5];
int i,j,k;char t[8];
printf("请输入五个国家的英语名:\n");
for(i=0;i<5;i++)
scanf("%s",&NAME[i].name);
printf("\n");
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(NAME[j].name[0]>NAME[j+1].name[0])//大数下沉
{
for(k=0;k<8;k++)
t[k]=NAME[j].name[k];
for(k=0;k<8;k++)
NAME[j].name[k]=NAME[j+1].name[k];
for(k=0;k<8;k++)
NAME[j+1].name[k]=t[k];
}
printf("五个国家名按字母顺序排列输出:\n");
for(i=0;i<5;i++)
printf("%s\n",NAME[i].name);
}

你定义的可输入的国家名的存储空间只有8个字符,如果你有9个字符的国家名,数组越界。死了

for(i=0;i<5;i++)
for(j=0;j<5-i-1;j++) ////// 这里要多-1,因为你的比较是 和+1比较
if(NAME[j].name[0]>NAME[j+1].name[0])//大数下沉
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-31
字符对比要用 strcmp, 你这样对比只不可行的

if(NAME[j].name[0]>NAME[j+1].name[0])追问

可是从大到小,就能正常输出,我使用了strcpy了,可是还一样的

追答

你只是比较字符串的第一个字符 name[0], 这里不是0吗,就是第一个字符,譬如说如果你输入:
Name2
Name1
,那排序就错了

什么strcpy? 我说的是strcmp
估计你程序可能还有逻辑问题,我就先懒得看,等你改了strcmp再发新代码才帮你看看吧

相似回答