怎样根据字符串的首字符给结构体中的字符串排序

问题遇到的现象和发生背景

题目的要求是给人名排序(人名是拼音)

问题相关代码,请勿粘贴截图

for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
while(strcmp(list[i].name,list[j].name)!=0){
if(list[i].name[0]>list[j].name[0]){

               k=list[i],list[i]=list[j],list[j]=k;
               break;
           }
        }
    }
}
运行结果及报错内容

一直卡着,没变化

我的解答思路和尝试过的方法

我想根据字符串首字符的ASC II值从小到大排序
代码中的k是我定义的一个结构体变量

我想要达到的结果 _

```c

```_

一般应该是字符串按字典序排序,哪有只根据第一个字符排序的
双重循环下,排序不应该再有while了,改成if。用while就死循环了

for(i=0;i<n;i++){
  for(j=i+1;j<n;j++){
if(strcmp(list[i].name,list[j].name)>0){
               k=list[i],list[i]=list[j],list[j]=k;
           }
        }
    }


修改如下:

for (i=0;i<n-1;i++)
{
    for (j=0;j<n-1-i;j++)
    {
        if(strcmp(list[j].name,list[j+1].name) > 0)
        {
            k = list[j];
            list[j]=list[j+1];
            list[j+1]= k;
        }
    }
}

不要用while循环,直接这样即可

for(i=0;i<n;i++){
    for(j=i+1;j<n;j++){
        if(list[i].name[0]>list[j].name[0]){
            k=list[i],list[i]=list[j],list[j]=k;
        }
    }
}