C语言链表问题调试错误,求高手检查!!!急!!!! 程序部分如下

来源:百度知道 编辑:UC知道 时间:2024/06/06 19:46:02
void Sort_by_num(Student stud[],int n) /*按学号排序(一个排序函数)*/
{ int i,j,*p,*q,s;
char t[1000];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
但是排序时12竟然排在6(个位数)前面!这是为什么???

你这里用的是字符串比较,字符串比较时,他是将两个字符串里面的字符一个一个比较的,如“12”和“6”,先将第一个串的第一个字符‘1’和第二个串的第一个字符‘6’比较,‘1’当然比‘6’小,后面的就不管了,只有当第一个字符一样时,才继续比较第二个,所以字符串“12”就比字符串“6”小,这里你比较的时候应该先比较长度,长度一样再比较大小,这样就对了

二楼的回答是正确的,因为用strcmp方法是比较两个字符串从左到右按字符的ASCII码值大小逐个字符相比较,直到出现不同的字符或遇到‘\0’为止,当遇到第一个不相同的字符便决定字符串比较的返回值了。
因此要知道自己相比较的是数值还是字符串了,按照冒泡排序的原则应该是比较整形数值了,不可采用strcmp方法进行判断。还有就是看你对字符串的比较排序采用何种规则了,不同的规则结果顺序是不同的,像采用字典的排序方式了,因此心中得有数目了。

这个得需要完整程序