c primer plus 第十四章课后编程2题

/编写一个程序,提示用户输入日,月和年。月份可以是月份号,月份名和月份名缩写。
然后该程序返回一年中到用户指定日子(包括着一天)的总天数
/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//月份结构 数字、全称、缩写、当月天数
struct month {
char number[3];
char months[20];
char monthss[4];
int days;
};

//初始化月份结构
struct month years[12] = {
{“1”,“January”,“juy”,31},
{“2”,“February”, “feb”,28},
{“3”,“March”,“mar”,31},
{“4”,“April”,“apr”,30},
{“5”,“May”,“may”,31},
{“6”,“June”,“jun”,30},
{“7”,“July”,“jul”,31},
{“8”,“August”,“aug”,31},
{“9”,“September”,“sep”,30},
{“10”,“October”,“oct”,31},
{“11”,“November”,“nov”,30},
{“12”,“December”,“dec”,31},
};

int main(void)
{
char fname[20];
int day,year,total,i,n;

puts(“请按照顺序输入日、月份、年份。”);
puts(“月份输入可以是数字、全称和缩写。”);
puts(“日期输入-1,结束循环。”);
while(scanf("%d %s %d",&day,fname,&year)==3 && day>0)
{
i=0;

puts(“请按照顺序输入日、月份、年份。”);
puts(“月份输入可以是数字、全称和缩写”);
puts(“日期输入-1,结束循环。”);
//清除多余的字符和换行符
while(getchar()!=’\n’)
continue;
//对比月份输入是否数字
for(i=0;i<12;i++)
{
if(isdigit(fname[0]))
{
if(strcmp(fname,years[i].number)==0)
break;
}
//对比月份输入是否全称
else if(strlen(fname)>3||isupper(fname[0]))
{
if(strcmp(fname,years[i].months)==0)

    break;

}

//对比月份输入是否缩写
else if(strlen(fname)==3)
{
if(strcmp(fname,years[i].monthss)==0)
break;
}
else
{
i=12;
break;
}
}

//如果是润年2月天数加1
if(year%4==0)
years[1].days=29;
else
years[1].days=28;

//判断月份输入是否正确
if(i==12)
{
puts(“月份输入错误,请重新输入:”);
continue;
}
//判断日期输入是否正确
if(day>years[i].days)
{
puts(“日期输入错误,请重新输入:”);
continue;
}
//计算总天数
for(n=0,total=0;n<i;n++)
total+=years[n].days;
printf(“截止%d %s %d总共是%d天\n”,day,fname,year,total+day);
//初始化变量
day=0;
year=0;
total=0;
}

return 0;
}

发布了85 篇原创文章 · 获赞 1 · 访问量 1889

猜你喜欢

转载自blog.csdn.net/Tekkenwxp/article/details/102581925