问一下,输出就无法返回了?
#include<stdio.h>#include<string.h>
#include<malloc.h>
#include <stdlib.h>
#include<conio.h>
#define LEN sizeof(STUDENT)
#define N 30
typedef struct{
int year;
int month;
int day;
}DATE;
typedef struct node{
char xueh[20];
char name[20];
char xib[20];
char cla[20];
char age[10];
char sex[10];
DATE date;
float yx;
float sx;
struct node *next;
}STUDENT;
//将日期字符串转换为日期型数据
DATE strToDate(char strDate[])
{
DATE date;
date.year=atoi(&strDate[0]);
date.month=atoi(&strDate[5]);
date.day=atoi(&strDate[8]);
return date;
}
//检查日期是否合法
int checkDate(char strDate[])
{
DATE date;
if(strlen(strDate)!=10||strDate[4]!='-'||strDate[7]!='-')
return 0;
date=strToDate(strDate);
if(date.month<1||date.month>12)
return 0;
if((date.year%4==0&&date.year%100!=0)||(date.year%400==0))
{
if(date.month==2&&date.day>29)
return 0;
}
else
{
if(date.month==2&&date.day>28)
return 0;
}
switch(date.month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(date.day>31) return 0;
case 4:case 6:case 9:case 11:if(date.day>30) return 0;
}
return 1;
}
STUDENT *head=NULL;
int len=0;
int flag=0;
void create();
void display();
int main(void)
{
int menuchoice;
char ch[20];
system("color 0f");
/*设置默认的控制台前景和背景颜色。
COLOR [attr],attr指定控制台输出的颜色属性。
颜色属性由两个十六进制数字指定。第一个为背景,第二个为前景。
0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色
8=灰色 9=淡蓝色 a=淡绿色 b=淡浅绿色 c=淡红色 d=淡紫色 e=淡黄色 f=亮白色
*/
do
{
printf("\n\n\n\n");
printf("\t\t\t 学生成绩管理基本功能菜单 \n");
printf("\t\t\t 作者:* * * \n");
printf("\t\t\t ======================= \n");
printf("\t\t\t 1.键盘输入新建学生记录 \n");
printf("\t\t\t 3.显示所有学生记录 \n");
printf("\t\t\t ======================= \n");
printf("\t\t\t请输入您的选择: \n");
scanf("%d",&menuchoice);
switch(menuchoice)
{
case 1:
if(flag==0)
{
create();
flag=1;
}
else
printf("数据已建立!");
system("pause");
system("cls");
break;
case 3:
if(flag==0)
printf("数据库为空.\n");
else
display();
system("pause");
system("cls");
break;
default:
printf("\n对不起,您输入的功能编号有错!请重新输入!!!\n");
system("pause");
system("cls");
break;
}
}while(1);
}
void create()
{
STUDENT *p1,*p2,*p3;
char strDate[20],str[10]; char num[20];
while(1)
{
printf("请输入学生学号,输(0)退出!\n");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
p1=p2=p3=(struct node*)malloc(sizeof(struct node));
strcpy(p1->xueh,num);
printf("请输入姓名:");
scanf("%s",p1->name);
printf("系别");
scanf("%s",p1->xib);
printf("班级");
scanf("%s",p1->cla);
printf("年龄");
scanf("%s",p1->age);
printf("性别");
scanf("%s",p1->sex);
do
{
printf("输入乘坐日期:");
scanf("%s",strDate);
if(checkDate(strDate)==1)
break;
printf("日期格式错误!");
}while(1);
p1->date=strToDate(strDate);
printf("每学期要求完成的学业学分,已完成的学业学分\n");
scanf("%f%f",&p1->yx,&p1->sx);
}
getchar(); //吸收回车符
len=len+1; //录入的人数加1
if(len==1)
head=p1;
else
{
p2->next=p1;
p2=p1; //存储此次录入的数据
}
p1=(struct node*)malloc(sizeof(struct node)); //开辟一个新的存储单元
}
void display()
{ STUDENT *p1;
for(p1=head;p1!=NULL;p1=p1->next)
{
printf ("%姓名s",p1->name);
printf("系别%s",p1->xib);
printf("班级%s",p1->cla);
}
}
时间格式xxxx-xx-xx