回 帖 发 新 帖 刷新版面

主题:[讨论]这个形参有什么问题?


以上为测试。


void asnam(char nam[][N],int num[])   /*按姓名升序排列****/
{
    void output(char nam[][N],int num[]);
    int i,j,k,p,temp;
    char ctemp[N];
    for(i=0;i<pn-1;i++)
        for(j=1;j<pn;j++)
            for(k=0;k<N;k++)
            {
                if(nam[i][k]>nam[j][k])
                {
                    for(p=0;p<N;p++)
                    {
                        ctemp[p]=nam[j][p];
                        nam[j][p]=nam[i][p];
                        nam[i][p]=ctemp[p];
                    }
                    temp=num[j];
                    num[j]=num[i];
                    num[i]=temp;
                    break;
                }
                if(nam[i][k]<nam[j][k])
                    break;
            }
    output(name,number);
}

回复列表 (共6个回复)

沙发

能写点注释么……没有完整代码的情况下看这个函数很费劲,也不好调试

板凳

if(nam[i][k]<nam[j][k])
                    break;
这个判断的意图是什么,感觉很突兀

3 楼

完整代码很长,不便分析

4 楼

[quote]if(nam[i][k]<nam[j][k])
                    break;
这个判断的意图是什么,感觉很突兀[/quote]

该句所在循环是进行字母升序排列,当nam[i][k]<nam[j][k]时,以及是升序排列,直接跳出循环。

5 楼

你注释掉这个判断试试看

6 楼

自己解决了,循环要j=i+1

我来回复

您尚未登录,请登录后再回复。点此登录或注册