恳请各位大佬帮忙看看代码出了什么问题
C语言DEV C++里跑是对的 放在OJ上就无输出结果
程序代码:#include<stdio.h>
#include<string.h>
int datai=0; //记录有多少组数据
struct DATA
{
char TIME[15];
char ID[12];
char ROOM[15];
char SAFTY[10];
char ACTION[5];
};
int main()
{
void input(struct DATA data[]);
void person(struct DATA data[]);
void date(struct DATA data[]);
void place(struct DATA data[]);
struct DATA data[30], * p = data;
int n[5]={1},i=0,k=0;
char program='9';
/* for( ; program !='0'; ) //重复获取program直到=0
{
scanf ("%c",&program);
if(program!='0') //若program=0则不进行选择
{
switch (program) //选择操作
{
case '1': input(p); break; // 输入数据,获取数据组数
case '2': person(p); break; // 根据学号
case '3': date(p); break;
case '4': place(p); break;
}
}
} */
/*********如果用switch OJ就会判time limit exceeded , 如果用下面的for OJ直接判wrong answer 输出为空*****************/
for(;n[k]!=0;i++)
{
scanf("%d",&n[i]);
getchar();
if(n[i]==1) input(p);
else if(n[i]==2) person(p);
else if(n[i]==3) date(p);
else if(n[i]==4) place(p);
k=i;
} //循环检测,直至出现 0 ,结束程序
return 0;
}
/*将门禁控制器传来的数据信息录入至数据库内*/
void input(struct DATA data[])
{
int check=1;
char com1[2]={'0'}, com2[2]={'\0'};
for(;check!=0;datai ++)
{
scanf("%[^(,&)],%[^,],%[^,],%[^,],%[^;];",data[datai].TIME,data[datai].ID,data[datai].ROOM,
data[datai].SAFTY,data[datai].ACTION);
getchar(); //避免\n录入(但是第一组数据避免不了?)
strncpy(com1,data[datai].TIME,1); //将输入的数据中第一个字符复制到com1中
check=strcmp(com1,com2); //检查com1是否等于空
/* if(data[datai].TIME[0]=='\n')
{
data[datai].TIME[0]=data[datai].TIME[1];
data[datai].TIME[1]=data[datai].TIME[2];
data[datai].TIME[2]=data[datai].TIME[3];
data[datai].TIME[3]=data[datai].TIME[4];
data[datai].TIME[4]=data[datai].TIME[5];
data[datai].TIME[5]=data[datai].TIME[6];
data[datai].TIME[6]=data[datai].TIME[7];
data[datai].TIME[7]=data[datai].TIME[8];
data[datai].TIME[8]=data[datai].TIME[9];
data[datai].TIME[9]=data[datai].TIME[10];
data[datai].TIME[10]=data[datai].TIME[11];
data[datai].TIME[11]=data[datai].TIME[12];
data[datai].TIME[12]=data[datai].TIME[13];
data[datai].TIME[13]='\0';
} */
}
datai=datai-1;
}
/*查询某一同学相关的所有门禁数据,并全部列举出来。*/
void person(struct DATA data[])
{
int i,j,check=1,count1=0,count2=0;
char who[10][15]={'\0'};
char com3[2]={'0'}, com4[2]={'#'};
for(i=0;check!=0;i++)
{
scanf("%s",who[i]); //输入要查询的同学id
strncpy(com3,who[i],1);
check=strcmp(com3,com4); //同上
}
count1=i-1; //获取一共多少名同学
for(i=0;i<count1;i++,count2=0)
{
for(j=0;j!=datai;j++) //依次查每一位同学匹配的数据
{
check=strcmp(who[i],data[j].ID); //若id匹配 则令check=0
if(check==0)
{
printf("%s,%s,%s,%s,%s;\n",data[j].TIME,data[j].ID,data[j].ROOM,
data[j].SAFTY,data[j].ACTION);
count2++; //若有输出 则count2递加
}
}
if(count2==0) printf("No record!\n"); //若count2没有递加,说明无匹配数据,输出no record
}
}
/*查询某一时间段内所有实验室的门禁数据,并全部列举出来。*/
void date(struct DATA data[])
{
int i, j, check1=1, check2=0;
int count1=0, count2=0;
int montha=0,monthb=0,month1=0;
int monthc=0,monthd=0,month2=0;
int daya=0,dayb=0,day1=0;
int dayc=0,dayd=0,day2=0;
int year[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char when1[10][8]={'\0'}, when2[10][8]={'\0'};
char com3='1';
for(i=0;com3!='\0';i++)
{
scanf("%[^( &)] %[^\n]",when1[i],when2[i]); //输入要查询的TIME
if(when1[i][0]=='\n')
{
when1[i][0]=when1[i][1];
when1[i][1]=when1[i][2];
when1[i][2]=when1[i][3];
when1[i][3]=when1[i][4];
when1[i][4]=when1[i][5];
when1[i][5]=when1[i][6];
when1[i][6]='\0';
}
com3=when1[i][0];
}
count1=i-1;
for(i=0;i<count1;i++,count2=0)
{
for(j=0;j!=datai;j++) //依次查每一时间匹配的数据
{
check1=strncmp(when1[i],data[j].TIME,6);
check2=strncmp(when2[i],data[j].TIME,6);
if(check1<=0&&check2>=0)
{
printf("%s,%s,%s,%s,%s;\n",data[j].TIME,data[j].ID,data[j].ROOM,
data[j].SAFTY,data[j].ACTION);
count2++; //若查询到则count2递加
}
}
if(count2==0)
{
montha=when1[i][2];
monthb=when1[i][3];
month1=(montha-48)*10+monthb-48;
monthc=when2[i][2];
monthd=when2[i][3];
month2=(monthc-48)*10+monthd-48;
daya=when1[i][4];
dayb=when1[i][5];
day1=(daya-48)*10+dayb-48;
dayc=when2[i][4];
dayd=when2[i][5];
day2=(dayc-48)*10+dayd-48;
if(day1<=year[month1-1]&&day1>0&&day2<=year[month2-1]&&day2>0&&day1<=day2)
{
printf("No record!\n"); //若count2没有递加,且数据都正确,输出no record
}
else if(day1>year[month1-1]||day1<=0||day2>year[month2-1]||day2<=0||day1>day2)
{
printf("Wrong Date!\n"); //若count2没有递加,且任一数据错误,wrong date
}
}
}
}
void place(struct DATA data[])
{
int i,j,check=1,count1=0,count2=0;
char where[10][15]={'\0'};
char com3[2]={'0'}, com4[2]={'#'};
for(i=0;check!=0;i++)
{
scanf("%s",where[i]); //输入要查询的同学id
strncpy(com3,where[i],1);
check=strcmp(com3,com4); //同上
}
count1=i-1; //获取一共多少名同学
for(i=0;i<count1;i++,count2=0)
{
for(j=0;j!=datai;j++) //依次查每一位同学匹配的数据
{
check=strcmp(where[i],data[j].ROOM); //若id匹配 则令check=0
if(check==0)
{
printf("%s,%s,%s,%s,%s;\n",data[j].TIME,data[j].ID,data[j].ROOM,
data[j].SAFTY,data[j].ACTION);
count2++; //若有输出 则count2递加
}
}
if(count2==0) printf("No record!\n"); //若count2没有递加,说明无匹配数据,输出no record
}
}






