QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 823|回复: 9

我的一个编程练习题,不知道有啥问题,请指教

[复制链接]
发表于 2003-11-25 10:55:01 | 显示全部楼层 |阅读模式
#include <iostream.h>

int main()
{
        int year,month,day;
        int i,j=28,days=0;
       
        cout&lt;&lt;"Input date(yyyy mm dd):";
        cin&gt;&gt;year;
        cin&gt;&gt;month;
        cin&gt;&gt;day;
        if((year/100)&amp;&amp;!(year/4)||year/400)
                   j=29;
                  

          switch (month)
                  case 1:
                  case 3:
                  case 5:
                  case 7:
                  case 8:
                  case 10:
[                 case 12:i=31;
                          break;

                  case 2: i=j;
                    break;
                  case 4:
            case 6:
             case 9:
              case 11: i=30;
                      break;
              default:{
                      cout&lt;&lt;"Fault date:month"&lt;&lt;endl;
                       return 1;
        }

           if ((day&gt;i||(day&lt;1))
    {
            cout&lt;&lt;"Fault date:days"&lt;&lt;endl;
            return 1;
           }
             
        switch (month)
                case 1:days=day;break;
                case 2:days=31+day;break;
                case 3:days=31+j+day;break;
                case 4:days=31+j+31+day;break;
                case 5:days=31+j+31+30+day;break;
                case 6:days=31+j+31+30+31+day;break;
                case 7:days=31+j+31+30+31+30+day;break;
                case 8:days=31+j+31+30+31+30+31+day;break;
                case 9:days=31+j+31+30+31+30+31+31+day;break;
                case 10:days=31+j+31+30+31+30+31+31+30+day;break;
                case 11:days=31+j+31+30+31+30+31+31+30+31+day;break;
                case 12:days=31+j+31+30+31+30+31+31+30+31+30+day;break;
               
        cout&lt;&lt;"days="&lt;&lt;days&lt;&lt;endl;
       
        return 0;
}

在switch语句有break终止的句子出错。我没有发现语法错误。请大家帮忙看看
 楼主| 发表于 2003-11-25 11:01:14 | 显示全部楼层
请不要在意上面的录入错误,我已经更改
回复

使用道具 举报

 楼主| 发表于 2003-11-25 11:04:11 | 显示全部楼层
错误消息:
24 D:\yzf\c\lx2.cpp  break statement not within loop or switch
25 D:\yzf\c\lx2.cpp  case label `2' not within a switch statement
25 D:\yzf\c\lx2.cpp  confused by earlier errors, bailing out
回复

使用道具 举报

发表于 2003-11-25 19:09:31 | 显示全部楼层
好象switch的case没有用{}括起来 诶。
回复

使用道具 举报

发表于 2003-11-25 21:00:26 | 显示全部楼层
[code:1]
#include&quot;iostream.h&quot;

int main&#40;&#41;
&#123;
int year,month,day;
int i,j=28,days=0;

cout&lt;&lt;&quot;Input date&#40;yyyy mm dd&#41;&#58;&quot;;
cin&gt;&gt;year;
cin&gt;&gt;month;
cin&gt;&gt;day;
if&#40;&#40;year/100&#41;&amp;&amp;!&#40;year/4&#41;||year/400&#41;
j=29;


switch &#40;month&#41;
&#123;
case 1&#58;
case 3&#58;
case 5&#58;
case 7&#58;
case 8&#58;
case 10&#58;
case 12&#58;i=31;
break;
case 2&#58; i=j;
break;
case 4&#58;
case 6&#58;
case 9&#58;
case 11&#58; i=30;
break;
default&#58;&#123;
cout&lt;&lt;&quot;Fault date&#58;month&quot;&lt;&lt;endl;
return 1;
&#125;
&#125;
if &#40;&#40;day&gt;i||&#40;day&lt;1&#41;&#41;&#41;
&#123;
cout&lt;&lt;&quot;Fault date&#58;days&quot;&lt;&lt;endl;
return 1;
&#125;

switch &#40;month&#41;
&#123;
case 1&#58;days=day;break;
case 2&#58;days=31+day;break;
case 3&#58;days=31+j+day;break;
case 4&#58;days=31+j+31+day;break;
case 5&#58;days=31+j+31+30+day;break;
case 6&#58;days=31+j+31+30+31+day;break;
case 7&#58;days=31+j+31+30+31+30+day;break;
case 8&#58;days=31+j+31+30+31+30+31+day;break;
case 9&#58;days=31+j+31+30+31+30+31+31+day;break;
case 10&#58;days=31+j+31+30+31+30+31+31+30+day;break;
case 11&#58;days=31+j+31+30+31+30+31+31+30+31+day;break;
case 12&#58;days=31+j+31+30+31+30+31+31+30+31+30+day;break;
&#125;
cout&lt;&lt;&quot;days=&quot;&lt;&lt;days&lt;&lt;endl;

return 0;
&#125;
[/code:1]
其实,计算天数(最后一个switch)不用这么写
你可以这么写
days=day;
switch(month-1)
{
case 11:days+=31;
case 10:days+=30;
case 9 :days+=31;
case 8:days+=30;
......
case 1:days+=31;
case 0:break;
default{error;}
}
因为case语句没有遇到break会一直往下执行
这样就可以被利用
要计算一年中的天数
不就是当月的天数和前几个月的天数
颠倒一下月数的计算次序以及利用case特性
写的代码就呀简单很多
回复

使用道具 举报

 楼主| 发表于 2003-11-25 23:51:21 | 显示全部楼层
非常感谢你的指导。
我编译时问题时出在break的位置,我希望你能够帮我找出黑体部分及相关的错误。
回复

使用道具 举报

 楼主| 发表于 2003-11-25 23:52:07 | 显示全部楼层
我用dev-c++,在windows nt下
回复

使用道具 举报

发表于 2003-11-26 08:39:59 | 显示全部楼层
#include"iostream.h"

int main()
{
int year,month,day;
int i,j=28,days=0;

cout&lt;&lt;"Input date(yyyy mm dd):";
cin&gt;&gt;year;
cin&gt;&gt;month;
cin&gt;&gt;day;
if((year/100)&amp;&amp;!(year/4)||year/400)
j=29;


switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:i=31;
break;
case 2: i=j;
break;
case 4:
case 6:
case 9:
case 11: i=30;
break;
default:{
cout&lt;&lt;"Fault date:month"&lt;&lt;endl;
return 1;
}
}
if ((day&gt;i||(day&lt;1)))
{
cout&lt;&lt;"Fault date:days"&lt;&lt;endl;
return 1;
}

switch (month)
{
case 1:days=day;break;
case 2:days=31+day;break;
case 3:days=31+j+day;break;
case 4:days=31+j+31+day;break;
case 5:days=31+j+31+30+day;break;
case 6:days=31+j+31+30+31+day;break;
case 7:days=31+j+31+30+31+30+day;break;
case 8:days=31+j+31+30+31+30+31+day;break;
case 9:days=31+j+31+30+31+30+31+31+day;break;
case 10:days=31+j+31+30+31+30+31+31+30+day;break;
case 11:days=31+j+31+30+31+30+31+31+30+31+day;break;
case 12:days=31+j+31+30+31+30+31+31+30+31+30+day;break;
}
cout&lt;&lt;"days="&lt;&lt;days&lt;&lt;endl;

return 0;
}

上面的仁兄比较勤快,已经改好了。
是对的。你再编译试试,注意改过的标有红色的地方。
回复

使用道具 举报

发表于 2003-11-26 14:47:50 | 显示全部楼层

我没有告诉他我已经改过了
呵呵
是我的过错
回复

使用道具 举报

 楼主| 发表于 2003-11-26 22:33:14 | 显示全部楼层
我已经知道错再哪儿啦。谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:45 , Processed in 0.053502 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表