#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct inf
{
char name[6];
int year;
int mon;
int day;
struct inf *next;
};
struct inf *getinf(int num)
{
unsigned int i = 0;
struct inf *p,*q;
p = malloc(sizeof(struct inf));
q = p;
for(i = 0 ; i < num ; i++)
{
p->next = malloc(sizeof(struct inf));
p = p->next;
scanf("%s %d/%d/%d",p->name,&p->year,&p->mon,&p->day);
}
p->next = NULL;
return q;
}
void deletlink(struct inf *p)//free p->next
{
struct inf *q = p->next;
p->next = q->next;
free(q);
}
unsigned int check(struct inf *p)
{
struct inf *q = p->next;
int i = 0,j = 0;
while(q != NULL)
{
if(q->year > 2014 )
{
deletlink(p);//free p->next
q = p->next;
i = 1;
}
if(q->year == 2014)
{
if(q->mon > 9)
{
deletlink(p);
q = p->next;
i = 1;
}
if(q->mon == 9)
{
if(q->day > 6)
{
deletlink(p);
q = p->next;
i = 1;
}
}
}
if(q->year < 1814)
{
deletlink(p);
q = p->next;
i = 1;
}
if(q->year == 1814)
{
if(q->mon < 9)
{
deletlink(p);
q = p->next;
i = 1;
}
if(q->mon == 9)
{
if(q->day < 6)
{
deletlink(p);
q = p->next;
i = 1;
}
}
}
if(i == 1)
{
i = 0;
}
else
{
p = p->next;
q = q->next;
i = 0;
j++;
}
}
return j;
}
int put(struct inf *p,unsigned int i)
{
char maxname[6] = {0};
char minname[6] = {0};
int maxyear;
int maxmon;
int maxday;
int minyear;
int minmon;
int minday;
if(i != 0)
{
p = p->next;
strcpy(maxname,p->name);
strcpy(minname,p->name);
maxyear = p->year;
maxmon = p->mon;
maxday = p->day;
minyear = p->year;
minmon = p->mon;
minday = p->day;
p = p->next;
}
else
{
printf("0\n");
return 0;
}
while(p != NULL)
{
if(p->year > maxyear)
{
maxyear = p->year;
maxmon = p->mon;
maxday = p->day;
strcpy(maxname,p->name);
}
if(p->year == maxyear)
{
if(p->mon > maxmon)
{
maxmon = p->mon;
maxday = p->day;
strcpy(maxname,p->name);
}
if(p->mon == maxmon)
{
if(p->day > maxday)
{
maxday = p->day;
strcpy(maxname,p->name);
}
}
}
if(p->year < minyear)
{
minyear = p->year;
minmon = p->mon;
minday = p->day;
strcpy(minname,p->name);
}
if(p->year == minyear)
{
if(p->mon < minyear)
{
minmon = p->mon;
minday = p->day;
strcpy(minname,p->name);
}
if(p->mon == minyear)
{
if(p->day < minday)
{
minday = p->day;
strcpy(minname,p->name);
}
}
}
p = p->next;
}
if(i != 0)
{
printf("%u %s %s\n",i,minname,maxname);
}
}
int main(void)
{
unsigned int i = 0,j = 0;
struct inf *p;
scanf("%u",&i);
p = getinf(i);
j = check(p);
put(p,j);
}
检查点后两个显示 段错误,我服啦,怎么检查都检查不出来哪里越界还是咋了,如果说我没有free链表的话前几个检查点都没显示段错误,是哪里越界了还是咋了,输入0的话也没报错啊,也可以输出0啊