#include<stdio.h>
void main()
{
struct person
{
int id;
char name[10];
int intime;
int outtime;
int islate;
int isbefore; };
struct person p[5]={{1,"liming",900,1705,0,0}, {2,"liding",905,1705,0,0},{3,"wanghao",900,1645,0,0}, {4,"liuxiao",900,1705,0,0},{5,"jianjie",805,1705,0,0}}; enum weekday{Sun,Mon,Tus,Wed,Thu,Fri,Sat}; enum weekday day;
int i,j=0,latecount=0,beforecount=0; for(j=0;j<5;j++)
{
if(p[j].intime>900)
{ p[j].islate=1; latecount++; }
}
printf ("从键盘中输入数字0~6中任意一个:");
scanf ("%d",&i);
if(i==Sun||i==Sat)
printf ("今天是周末,没有考勤信息\n");
else
{
switch(i)
{ case Mon:printf("今天是星期%d\n",Mon);break; case Tus:printf("今天是星期%d\n",Tus);break;
case Wed:printf("今天是星期%d\n",Wed);break; case Thu:printf("今天是星期%d\n",Thu);break;
case Fri:printf("今天是星期%d\n",Fri); }
printf("迟到人员列表如下:\n");
for(j=0;j<5;j++)
{
if(p[j].islate==1) printf("%d,%s,%d,%d",p[j].id,p[j].name[10],p[j].intime,p[j].outtime);
}
printf("早退人员列表如下:\n"); }}
如果代码有问题,你可以加点日志输出,来判断是哪块代码有问题。
有几个小问题要改一下。输出正常的,我看你只写了迟到的逻辑,早退的还没写。
printf("%d,%s,%d,%d",p[j].id,p[j].name[10],p[j].intime,p[j].outtime);
改为
printf("%d,%s,%d,%d",p[j].id,p[j].name,p[j].intime,p[j].outtime);
如有帮助,望采纳。有问题继续沟通交流。
变量j有问题,外循环使用了j,内循环又使用了j,导致j的值被内循环修改,建议内循环换一个变量名即可。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632