注册 登录
编程论坛 C语言论坛

我是大一新生,期末考试答辩做的项目,指针没学,不太理解。求指点

木子洋 发布于 2019-06-21 18:06, 2612 次点击
score *creat(void)
{   
    score *head;
    score *p1,*p2,*p3,*max;
    int i,j;
    char t[10];
    n=0;
    p1=p2=p3=(score *)malloc(LEN);/*head=p3; 开辟一个新单元*/
    printf("请输入学生资料,输0退出!\n");
    repeat1: printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/
    scanf("   %d",&p1->number);
    while(p1->number<0)
     {
         getchar();
         printf("输入错误,请重新输入学生学号:");
         scanf("%d",&p1->number);
     }
  /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
    if(p1->number==0)
        goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
    else
    {
        p3=head;
        if(n>0)
        {
            for(i=0;i<n;i++)
            {
                if(p1->number!=p3->number)
                    p3=p3->next;
                else
                {
                    printf("学号重复,请重输!\n");
                    goto repeat1;
     /*当输入的学号已经存在,程序报错,返回前面重新输入*/
                }
            }
        }
     }
       printf("请输入学生姓名:");
       scanf("%s",&p1->name);/*输入学生姓名*/
       printf("请输入消费情况:");/*输入消费情况;*/
       scanf("%d",&p1->xiaofei);

 while(p1->number!=0)
  {
    n=n+1;
    if(n==1)
        head=p1;
    else
        p2->next=p1;
        p2=p1;
        p1=(score *)malloc(LEN);
        printf("请输入学生资料,输0退出!\n");
        repeat2:printf("请输入学生学号(学号应大于0):");
        scanf("%d",&p1->number);/*输入学号,学号应大于0*/

   while(p1->number<0)
   {
       getchar();
       printf("输入错误,请重新输入学生学号:");
       scanf("%d",&p1->number);}
   /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
   if(p1->number==0)
    goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
   else
    {
        p3=head;
   if(n>0)
    {
        for(i=0;i<n;i++)
        {
            if(p1->number!=p3->number)
            p3=p3->next;
            else
                {
                    printf("学号重复,请重输!\n");
                    goto repeat2;
      /*当输入的学号已经存在,程序报错,返回前面重新输入*/
                }
        }
    }
   }
   printf("请输入学生姓名:");
   scanf("%s",&p1->name);/*输入学生姓名*/
   printf("请输入消费情况:");
   scanf("%d",&p1->xiaofei);/*输入消费情况; */
 }
end: p1=head;
     p3=p1;
  for(i=1;i<n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            max=p1;
            p1=p1->next;
            if(max->number>p1->number)
                {
                    k=max->number;
                    max->number=p1->number;
                    p1->number=k;
         /*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
                    strcpy(t,max->name);
                    strcpy(max->name,p1->name);
                    strcpy(p1->name,t);
         /*交换前后结点中的姓名,使之与学号相匹配*/
         /*交换前后结点中的消费情况,使之与学号相匹配*/
                }
        }
        max=head;p1=head;/*重新使max,p指向链表头*/
   }
   p2->next=NULL;/*链表结尾*/
   printf("输入的学生数为:%d个!\n",n);
   getch();
   return(head);
}
4 回复
#2
幻紫灵心2019-06-21 19:22
教C怎么可能不教指针?
#3
吕孟伟2019-06-21 19:36
哪句不懂你指出来就行。
#4
木子洋2019-06-21 21:23
回复 楼主 木子洋
课时不够
#5
木子洋2019-06-22 21:17
他做了一个列表。然后不太理解上是咋做出来的。
1