永发信息网

C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!!!

答案:1  悬赏:20  手机版
解决时间 2021-04-02 02:11
  • 提问者网友:抽煙菂渘情少年
  • 2021-04-01 15:07
C语言中国有句俗语叫做“三天打鱼两天晒网”求高手!!!
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-04-01 15:40
这是我的测试结果:可以识别不同的错误种类,包括日期格式错误,日期不存在等(空行也会被识别为错误):
Please type in date as yyyy-mm-dd for each line

the last line should be 0

warning: this program uses gets(), which is unsafe.

输入:
2013-10-01

2010-08-30

2012-06-31

2013-05-31

1998-09-12

nothing

0
输出:

2013-10-01: he was fishing at that day

2010-08-30: he was sleeping at that day.

2012-06-31: Error: date doesn't exist

2013-05-31: he was sleeping at that day.

1998-09-12: Error: date too early

: Error: wrong format

nothing: Error: wrong format

代码:

#include

#include

#include

#define NEW (node *)malloc(sizeof(node))

#define MAX_CHAR_IN_LINE 50

typedef struct node{

char* date;

node* next;

} node;

int lengOfString(char* string)

{

int length=0;

while(string[length]!='\0' && length < MAX_CHAR_IN_LINE)

length ++;

return length;

}

bool checkFormat(char* string)

{

int i=0;

while(string[i])

{

if(i!=4 && i!=7)

{

if(string[i]<'0' || string[i]>'9' )

return false;

}

else

{

if (string[i]!='-')

return false;

}

i++;

}

if(i!=10)

return false;

return true;

}

bool isLeapYear(int year)

{

if ((year % 4 == 0) && !(year % 100 == 0))

return true;

else if(year % 400 ==0)

return true;

return false;

}

int daysInMonth(int year, int month)

{

int table[12]={ 31,28,31,30,31,30,31,31,30,31,30,31};

if (isLeapYear(year))

table[1]=29;

return table[month-1];

}

int checkDate(char* string)

{

string[4]='\0';

string[7]='\0';

int year=atoi(string);

int month=atoi(&string[5]);

int day=atoi(&string[8]);

if(month>12 || month < 1 )

return -1;

if( day <1 || day> daysInMonth(year,month))

return -1;

if(year < 2000)

return -2;

int days=0;

int ite_year;

int ite_month;

for (ite_year=2000; ite_year<=year;ite_year++)

{

for(ite_month=1;ite_month< (ite_year==year ? month : 13);ite_month++)

{

days+= daysInMonth(ite_year,ite_month);

}

}

days+=day;

int remainder=days%5;

if(remainder==4 || remainder==0)

return 0;//sleeping

else

return 1;//fishing

}

void printList(node* head)

{

while(head!=NULL)

{

printf("%s: ",head->date);

if(checkFormat(head->date))

{

int value=checkDate(head->date);

if (value==-1)

printf("Error: date doesn't exist\n");

if (value==-2)

printf("Error: date too early \n");

if (value==0)

printf("he was sleeping at that day. \n");

if (value==1)

printf("he was fishing at that day \n");

}

else

{

printf("Error: wrong format \n");

}

head=head->next;

}

}

int main()

{

printf("Please type in date as yyyy-mm-dd for each line\n");

printf("the last line should be 0\n");

node* head=NEW;

node* tail=head;

while(true)

{

char* input=(char*)malloc(MAX_CHAR_IN_LINE*sizeof(char));

gets(input);

if (strncmp(input,"0",MAX_CHAR_IN_LINE)==0)

break;

int str_length=lengOfString(input+1);

char* date= (char*)malloc(sizeof(char)*str_length);

strcpy(date,input);

free(input);

node* entry=NEW;

entry->date=date;

entry->next=NULL;

tail->next=entry;

tail=entry;

}

printList(head->next);

return 0;

}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯