C Primer Plus 14章第二题

编写一个函数,提示用户输入日、月和年。月份可以是月份号、月分名或月分名缩写。然后该程序应返回一年中到用户指定日子(包括这一天)的总天数。

#include <stdio.h>
#include <string.h>

typedef struct mon
{
char months[10];
char month_s[10];
int days;
}MONTH;

int main()
{
int sum_s = 0;
sum_s = sum();
printf(“你输入的日期总天数是:%d\n”,sum_s);
system(“pause”);
return 0;

}

int sum()
{
int month_s,year,day,i,day_sum = 0;
char month[10];
MONTH months[12] = { //初始化结构数组
{“january”,“jan”,31},
{“february”,“feb”,28},
{“march”,“mar”,31},
{“april”,“apr”,30},
{“may”,“may”,31},
{“june”,“jun”,30},
{“july”,“jul”,31},
{“august”,“aug”,31},
{“september”,“sept”,30},
{“october”,“sept”,31},
{“november”,“nov”,30},
{“december”,“dec”,31}
};
printf(“输入年份:”);
scanf("%d",&year);
printf(“输入月:”);
while(1)
{
while(scanf("%d",&month_s) != 1)//判断输入的是数字还是字符串
{
gets(month);//保存字符串
for(month_s = 1;month_s <= 12;month_s++)//用循环增加month_s变量,month_s代表月份
{
if(strcmp(month,months[month_s - 1].months) == 0||strcmp(month,months[month_s - 1].month_s) == 0)//比较结构数组成员是否匹配
break;
}
if(month_s == 13)
printf(“月份输入有误,请重新输入!\n”);
else
break;
}
if(month_s == 0 || month_s > 12)//输入月份为0或者大于12则重新循环
printf(“月份不能为0 或 大于12!\n”);
else
break;
}
printf(“输入日:”);
while(1)
{
while(scanf("%d",&day) != 1)//输入判断只能为数字
{
while(getchar() != ‘\n’)
continue;
}
if(year % 4 == 0)//如果该年份是闰年,把结构第二个元素的天数改为29
{
months[1].days = 29;
}
if(day > months[month_s - 1].days)//输入的天数不能大于输入月份的天数
printf(“天数不能大于当前月份天数!\n”);
else
break;
}
if(month_s == 1)//输入的是1月直接加上天数
day_sum += day;
else
{
for(i = 0;i < month_s-1;i++)//循环加上输入月数-1的天数和
{
day_sum += months[i].days;
}
day_sum += day;
}
return day_sum;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值