确定输入日期是一年中的第几天的程序,高手帮我看看。

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:07:39
这个程序是要计算用户输入的一个日期是一年中的第几天。。我自己写的,但是运行结果总是不对,请懂的帮我看下有什么问题。另外在判断用户输入的那里似乎太麻烦,而且在switch那里,如果用户重新输入的是2009 4 31或者2009 2 30都没办法再检错了,有什么改进的办法没?谢谢高人指点,本人是菜鸟。。
#include<iostream.h>
void main()
{
int d,m,y,day;
bool r;
cout<<"请输入一个日期(年月日):";
cin>>y>>m>>d;
do
{
while (y<0||m<1||m>12||d<1||d>31)
{
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;
};
r=(y%4==0&&y%100!=0||y%400==0);
switch(m)
{
case 4:
case 6:
case 9:
case 11: if(d=31)
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;break;
case 2: if(r&&d>29)
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;break;
if(!r&&d>28)
cout<<"输入有误,请重新输入:";

LZ要学会把程序分块,不要弄成一大串的不好。例如可以把是否闰年,以及求某月份的总天数都可以做成一个函数。
你的这个程序最主要的就是switch没有break;这样的话比如后面的switch (m)处m=5的话,他会跳到case 5:处执行,然后执行case 6:一直到你的switch结束。
所以除非你有需要, 否则没个case的最后一条语句都应该写上break;

#include<iostream.h>
void main()
{
int d,m,y,day;
bool r;
cout<<"请输入一个日期(年月日):";
cin>>y>>m>>d;
do/*没必要*/
{
while (y<0||m<1||m>12||d<1||d>31)
{
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;
};
r=((y%4==0&&y%100!=0)||y%400==0); /*加括号*/
switch(m)
{
case 4:
case 6:
case 9:
case 11: if(d==31) /*==*/
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;break;
case 2: if(r&&d>29)
cout<<"输入有误,请重新输入:";
cin>>y>>m>>d;break;{}/*用while*/
if(