刚接触C,遇到不懂的,望各位大神伸一下援手!!
#include <stdio.h>
#include <conio.h>
int year_ch(int a) /*检查是否闰年*/
{
int b;
if(a%400==0||(a%4==0&&a%100!=0))
b=1;
else b=0;
return b;
}
int month_ch(int y,int m,int d) /*检查日期是否输入错误*/
{
int error=0;
if(m>12)
{
printf("日期输入错误!\n");
error+=1;
}
if(m==2) /*2月的闰年及非闰年情况*/
{
if(year_ch(y)==1)
{
if(d>29)
{
printf("日期输入错误!\n");
error+=1;
}
}
else if(d>28)
{
printf("日期输入错误!\n");
error+=1;
}
}
else if(m<8) /*检查大小月,1~7双数月是小月*/
{
if(m%2==0)
{
if(d>30)
{
printf("日期输入错误!\n");
error+=1;
}
}
else if(d>31)
{
printf("日期输入错误!\n");
error+=1;
}
}
else if(m%2==0) /*8~12月单数月是小月*/
{
if(d>31)
{
printf("日期输入错误!\n");
error+=1;
}
else if(d>30)
{
printf("日期输入错误!\n");
error+=1;
}
}
return error;
}
int main()
{
int e,year,month,day,sum;
printf("请输入年 月 日\n");
scanf("%d%d%d",&year,&month,&day);
e=month_ch(year,month,day);
if(e>0) /*检查如果错误就终止程序*/
{
getch();
exit(1);
}
switch(month) /*初步计算一年中的几天*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("日期输入错误!\n");break;
}
sum+=day; /*进一步计算*/
if(month>2) /*判断是否闰年精确计算*/
if(year_ch(year)==1)
{
printf("您输入的日期是%d年中的第%d天\n",year,sum+1);
}
else
printf("您输入的日期是%d年中的第%d天\n",year,sum);
else
printf("您输入的日期是%d年中的第%d天\n",year,sum);
getch();
return 0;
}
以上是我自编的一个计算一年中的第几天的程序,我想令程序在输出“日期输入错误”后又重新执行回主函数的内容,
但又要正常输出!即重新提醒我输入新日期,然后继续运行!!该怎么做啊?
[解决办法]
int main(){ int e,year,month,day,sum;loop: printf("请输入年 月 日\n"); scanf("%d%d%d",&year,&month,&day); e=month_ch(year,month,day); if(e>0) /*检查如果错误就终止程序*/ { printf("日期输入错误!\n"); goto loop; } switch(month) /*初步计算一年中的几天*/ { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("日期输入错误!\n");break; } sum+=day; /*进一步计算*/ if(month>2) /*判断是否闰年精确计算*/ if(year_ch(year)==1) { printf("您输入的日期是%d年中的第%d天\n",year,sum+1); } else printf("您输入的日期是%d年中的第%d天\n",year,sum); else printf("您输入的日期是%d年中的第%d天\n",year,sum); getch(); return 0;}
[解决办法]
看我实现的基本功能的例子,比你的简洁多了吧O(∩_∩)O
#include <iostream>using namespace std;bool is_leap_year(int i){ return i%4==0&&i%100!=0||i%400==0;}int differ(int year,int month,int day){ int day_in_month=0; int day_in_day; int days[12]={31,0,31,30,31,30,31,31,30,31,30,31}; for(int j=1;j<month;j++) { if(j==2) day_in_month=day_in_month+28+is_leap_year(year); else day_in_month=day_in_month+days[j-1]; } day_in_day=day; return /*day_in_year+*/day_in_month+day_in_day;}int main(){ int year,month,day; cout<<"Plese input the correct year month day:"<<endl; cin>>year>>month>>day; cout<<"这天是今年的第"<<differ(year,month,day)<<"天"<<endl; return 0;}