鱼C论坛

 找回密码
 立即注册
查看: 1766|回复: 1

这个排序为什么编译通过运行不出来C语言

[复制链接]
发表于 2020-7-3 12:49:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
只看一下sort函数就行
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. typedef struct _STU
  5. {
  6.         char num[10];
  7.         char name[10];
  8.         int  s1,s2,s3;
  9.         int sall;//S1+S2+S3
  10.         struct _STU* pNext;
  11. } STUNODE;

  12. //声明链表的头和尾
  13. STUNODE* g_pHead = NULL;  //O
  14. STUNODE* g_pEnd = NULL;

  15. //排序
  16. void sort();
  17. //清空链表,防止内存泄漏
  18. void freenode()
  19. {
  20.         STUNODE* pTemp = g_pHead;
  21.         while (g_pHead != NULL)
  22.         {
  23.                 //记录节点
  24.                 pTemp = g_pHead;

  25.                 //向后移动了一个
  26.                 g_pHead = g_pHead->pNext;

  27.                 //删除节点
  28.                 free(pTemp);
  29.         }
  30. }
  31. //菜单
  32. void Printmnue()
  33. {

  34. printf("1.添加学生数据\n");

  35. printf("3.排序\n");

  36. printf("6.显示学生信息\n");

  37. printf("7.退出\n");
  38. }
  39. //添加学生
  40. void add(char *num,char *name,int s1,int s2,int s3)
  41. {        
  42.         //创建一个节点
  43.         STUNODE* pTemp =(STUNODE*)malloc(sizeof (STUNODE));

  44.         //第一步,检验参数的合法性
  45.         if (NULL == num || NULL == name || s1 < 0||s2<0||s3<0)
  46.         {
  47.                 printf ("学生信息输入错误!\n");
  48.                 return ;
  49.         }
  50.         //节点成员符初始值
  51.         strcpy(pTemp->num, num);
  52.         strcpy(pTemp->name, name);
  53.         pTemp->s1 = s1;
  54.         pTemp->s2 = s2;
  55.         pTemp->s3 = s3;
  56.         pTemp->pNext = NULL;

  57.         //接在链表上
  58.         if (NULL == g_pHead || NULL == g_pEnd)
  59.         {
  60.                 g_pHead = pTemp;
  61.                 //g_pEnd = pTemp;
  62.         }
  63.         else
  64.         {
  65.                 g_pEnd->pNext = pTemp;  //链接
  66.                 //g_pEnd = pTemp;         //向后移动
  67.         }
  68.         g_pEnd = pTemp;

  69. }

  70. //显示所有学生
  71. void show()
  72. {        //声明指针
  73.         STUNODE* pTemp = g_pHead;
  74.         while (pTemp != NULL)//遍历链表
  75.         {
  76.                 printf ("学号:%s\t, 姓名:%s\t, 语文:%d\t, 数学:%d\t, 英语:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
  77.                 //向下走一步
  78.                 pTemp = pTemp->pNext;
  79.         }
  80. }

  81. int main()
  82. {        
  83.         int choice=-1; //初始化
  84.         char num[10] = {'\0'};
  85.         char name[10] = {'\0'};
  86.         int  s1= -1;
  87.         int  s2= -1;
  88.         int  s3= -1;
  89.         int sum;//=s1+s2+s3;
  90.         int flag= 1;
  91.         STUNODE* pTemp = NULL;
  92.         Printmnue();

  93.         
  94.         while (flag)
  95.         {        
  96.         
  97.                    printf("请输入你的选择(1-7)\n");
  98.                   scanf("%d", &choice);
  99.           switch (choice)
  100.           {
  101.      case 1:
  102.          //尾添加
  103.                 printf ("输入学号:");
  104.                 scanf ("%s", num);
  105.                 printf ("输入姓名:");
  106.                 scanf ("%s", name);
  107.                 printf ("输入语文成绩:");
  108.                 scanf ("%d", &s1);
  109.                 printf ("输入数学成绩:");
  110.                 scanf ("%d", &s2);
  111.                 printf ("输入英语成绩:");
  112.                 scanf ("%d", &s3);
  113.                 add(num, name, s1,s2,s3);        
  114.             break;

  115.      case 3:
  116.                  //排序
  117.                         sort();

  118.             break;
  119.   
  120.      case 6:
  121.                  //显示所有学生
  122.                  show();
  123.             break;
  124.      case 7:
  125.                  //退出
  126.                  flag=0;
  127.             break;
  128.       
  129.         }
  130.    
  131. }
  132.          
  133.         //释放链表
  134.         freenode();
  135.         system("pause");
  136.         return 0;
  137. }
  138. //排序
  139. void  sort()
  140. {
  141.         STUNODE* pTemp = g_pHead;
  142.         char num[10] = {0};
  143.         char name[10] = {'\0'};
  144.         int s1,s2,s3;
  145.         int sum;
  146.         STUNODE *p,*q;
  147.         for(p=g_pHead;p!=NULL;p=p->pNext)
  148.         {
  149.                 for(q=p;q!=NULL;q=q->pNext)
  150.                 {
  151.                         if((q->s1 +q->s2 +q->s3 )<(q->pNext->s1 +q->pNext->s2 +q->pNext->s3 ))
  152.                         {
  153.                                 s1=q->s1 ,q->s1=q->pNext->s1,q->pNext->s1=s1;
  154.                                 s2=q->s2 ,q->s2=q->pNext->s2,q->pNext->s2=s2;
  155.                                 s3=q->s3 ,q->s3=q->pNext->s3,q->pNext->s3=s3;
  156.                                 strcpy(num, q->num );
  157.                                 strcpy(q->num,q->pNext->num );
  158.                                 strcpy(q->pNext->num,num);
  159.                                 strcpy(name, q->name );
  160.                                 strcpy(q->name,q->pNext->name );
  161.                                 strcpy(q->pNext->name,name);       
  162.                         }
  163.                 }
  164.         }
  165.         //STUNODE* pTemp = g_pHead;
  166.         while (pTemp != NULL)//遍历链表
  167.         {
  168.                 printf ("学号:%s\t, 姓名:%s\t, 英语:%d\t, 计算机:%d\t, 数学:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
  169.                 //向下走一步
  170.                 pTemp = pTemp->pNext;
  171.         }
  172.        
  173.        
  174. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-4 10:34:54 | 显示全部楼层
s1=q->s1 ,q->s1=q->pNext->s1,q->pNext->s1=s1; 这种写法很奇怪,语句间不是应该用 ; 隔开吗,或者你这个是逗号表达式?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-6 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表