qq_45065977 2019-05-22 16:03 采纳率: 0%
浏览 341

萌新求问,关于C语言函数返回值的问题

有没有大佬解释一下为什么第一段程序改成第二段程序运行就出错啊,跪谢。
一:
#include
#include
#include

typedef struct student{
char size[6];
float score;
struct student* next;
} Student;

int main()
{
int n=1;
char input[7];
Student *head=NULL;
Student *current, *end;
printf("please input the size of the student No.%d\n",n);
while(gets(input)!=NULL && input[0]!='0')
{
current=(Student *)malloc(sizeof(Student));
if(head==NULL)
{
head=current;
} else {
end->next=current;
}
printf("please input the score of the student No.%d\n",n);
strcpy(current->size,input);
scanf("%f",&current->score);
while(getchar()!='\n')
{
continue;
}
current->next=NULL;
n++;
printf("please input the size of the student No.%d\n",n);
end=current;
}

Student *headl=NULL;
headl=head;
if(headl==NULL)
{
    printf("No list entered!!!!!!!!\n");
}
while( headl!=NULL )
{
    printf("the student with a school number of %6s have a score of %4.2f\n",headl->size,headl->score);
    headl=headl->next;
}

while( headl!=NULL )
{
    free(headl);
    headl->next=headl;
} 
return 0;   

}

二:
#include
#include
#include

typedef struct student{
char size[6];
float score;
struct student* next;
} Student;

Student *add( Student *head );
void printfl( Student *head );
void freel( Student *head );

int main()
{
Student *head=NULL, *headl=NULL;
head=add(head);
printfl(head);
free(head);
return 0;
}

Student *add( Student *head )
{
int n=1;
char input[7];
Student *headl=NULL;
headl=head;
Student *current, *end;
printf("please input the size of the student No.%d\n",n);
while(gets(input)!=NULL && input[0]!='0')
{
if(headl==NULL)
{
headl=current;
} else {
end->next=current;
}
current=(Student *)malloc(sizeof(Student));
printf("please input the score of the student No.%d\n",n);
strcpy(current->size,input);
current->next=NULL;
scanf("%f",&current->score);
while(getchar()!='\n')
{
continue;
}
n++;
printf("please input the size of the student No.%d\n",n);
end=current;
}
return headl;
}

void printfl( Student *head )
{
Student *headl=NULL;
headl=head;
if(headl==NULL)
{
printf("No list entered!!!!!!!!\n");
}
while( headl!=NULL )
{
printf("the student with a school number of %6s have a score of %f\n",headl->size,headl->score);
headl=headl->next;
}
}

void freel( Student *head )
{
Student *headl=NULL;
headl=head;
while( headl!=NULL )
{
free(headl);
headl->next=headl;
}
}

  • 写回答

2条回答 默认 最新

  • 普通网友 2019-05-22 16:13
    关注

    可以单步debug啊,这样你就知道出错的信息和出错的位置了。

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀