免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6671 | 回复: 14
打印 上一主题 下一主题

[C] 可以在main函数内完成排序,但是当我想把排序单独用一个函数sort处理时,程序老是出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-30 15:09 |只看该作者 |倒序浏览
自学C到现在,这是我写的代码量最多的一段了,我可以在main函数内完成排序,但是当我想把排序单独用一个函数sort处理时,程序老是出错,向大神们求教啊!(我看了错误提示自己估计是红色区域出错了,不过自己不清楚原因)

# include <stdio.h>
# include <malloc.h>

void sort(struct student * p, int l)
{
        struct student t;
        int i, j;
    for(i = 0; i <= l-1; ++i)
        {
                for (j = 0; j <= l-1-i; ++j)
                     if (p[j].score < p[j+1].score)
                                 t = p[j];
                             p[j] = p[j+1];
                                 p[j+1] = t;
        }
}

struct student
{
        int num;
        char name[100];
        char sex;
        float score;
};

int main (void)
{
        int i;
        int len;
        struct student * pArr;

        printf("请输入学生个数:");
        scanf("%d", &len);
        pArr = (struct student *)malloc(len * sizeof(struct student));

    for (i = 1; i <= len; ++i)
        {
            printf("请输入第%d个学生信息:\n", i);
            scanf("%d %s %c %f", &pArr.num, pArr.name, &pArr.sex, &pArr.score);
            printf("\n");
        }

        sort(pArr, len);

    for (i = 1; i <= len; ++i)
        {
              printf("输出的是成绩第%d名学生信息:\n", i);
            printf("%d %s %c %f", pArr.num, pArr.name, pArr.sex, pArr.score);
            printf("\n");
        }

    return 0;
}

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2013-07-30 15:12 |只看该作者
这个问题很简单,因为“代码不排版乃缺德行为”,所以你只要将代码排版一下就看出来了
  1. void sort(struct student * p, int l)
  2. {
  3.     struct student t;
  4.     int i, j;
  5.     for(i = 0; i <= l-1; ++i)
  6.     {
  7.         for (j = 0; j <= l-1-i; ++j)
  8.             if (p[j].score < p[j+1].score)
  9.                 t = p[j];
  10.         p[j] = p[j+1];
  11.         p[j+1] = t;
  12.     }
  13. }
复制代码

评分

参与人数 1可用积分 +2 收起 理由
samon_fu + 2 神马都是浮云

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2013-07-30 16:25 |只看该作者
回复 2# bruceteen
我擦原来是这个呀,注意力没放在这方面,我说找了半天都没发现


   

论坛徽章:
0
4 [报告]
发表于 2013-07-30 16:28 |只看该作者
回复 2# bruceteen
不过好像试了下,代码还是不行啊


   

论坛徽章:
0
5 [报告]
发表于 2013-07-30 17:24 |只看该作者
  1. for (i = 0; i < len; ++i)
  2.         {
  3.             printf("请输入第%d个学生信息:\n", i+1);
  4.             scanf("%d %s %c %f", &pArr[i].num, pArr[i].name, &pArr[i].sex, &pArr[i].score);
  5.             printf("\n");
  6.         }

  7.         sort(pArr, len);

  8.     for (i = 0; i < len; ++i)
  9.         {
  10.             printf("输出的是成绩第%d名学生信息:\n", i+1);
  11.             printf("%d %s %c %f", pArr[i].num, pArr[i].name, pArr[i].sex, pArr[i].score);
  12.             printf("\n");
  13.         }

复制代码

论坛徽章:
0
6 [报告]
发表于 2013-07-30 19:05 |只看该作者
回复 5# zonglin
不懂,什么意思啊?


   

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
7 [报告]
发表于 2013-07-31 08:30 |只看该作者
技术小菜鸟 发表于 2013-07-30 19:05
回复 5# zonglin
不懂,什么意思啊?

对于一个数组 array[N],其下标范围是[0,N)。看你的代码,你喜欢写成[0,N-1]也无所谓
但在main函数中,你写成了[1,N],对比一下5楼的代码和你的代码,就看出来了

论坛徽章:
0
8 [报告]
发表于 2013-07-31 09:28 |只看该作者
回复 7# bruceteen
你的意思我懂了,我以后会注意的,但是这个代码不带中间的f()函数运行是正常的,主要错误不是这个,求大神改一个可以运行的代码

   

论坛徽章:
0
9 [报告]
发表于 2013-07-31 10:49 |只看该作者
第一个错误是5楼指出的
第二个错误是sort函数:你应该是想用冒泡排序,其中两个for循环不是你那样写的,我觉得应该是这样写
for(int i= 0; i < l-1; ++i)
  for(int j=i+i; j< l; ++j)
     if (p[i].score < p[j].score)
        {
           t = p[i];
           p[i] = p[j];
           p[j] = t;
         }

论坛徽章:
0
10 [报告]
发表于 2013-07-31 17:01 |只看该作者
回复 9# seabiscuitxf
测试完毕,问题没有解决,你的for循环其实和我的都行,角度不一样
,求大神给个能行的代码啊

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP