作者game0416 (凤狼)
看板NTUE-CS102
标题Re: [闲聊] 程设作业
时间Fri Nov 27 00:04:57 2009
※ 引述《linjrming (风之信使)》之铭言:
: 刚吃饱饭,随手写了一下,帮助消化
: 我不知道老师要的是什麽,我只是随便写个会动的时钟而已
差不多就是这样的题目<(_ _)>
: 原始码,不含注解
: 拿这份去交作业的,彦廷麻烦当掉他,谢谢
: http://stu.ntue.edu.tw/~s9516018/1.cpp
刚好有个小bug,那是我中午写的时候没想到怎麽表示的bug (炸)
万分感谢QQ
这里先推荐一个测资
23 59 55 (时 分 秒)
原则上这个题目会遇到的大部分bug都可以在这个测资找出来....取55是有时间反应
太大的洞就还是以下略,另外问比较好
以下有说好的for回圈跟bug说明
一样要自己写的就不要看了,写完再来看看有没有这个bug
先来讲这个bug...拿23 59 59当输入
照一般时钟应该是 0:0:0 ,因为时钟不该有显示 "24:60:60" 其中任一种状况
而应该是直接归零
这个bug主要原因是 +1 、 归零 与 输出时间的前後顺序不当所致
以学长code判断 分、秒 为例
顺序是: (输出 → 判断是否>59,归零 → +1) loop
这时候,如果输出59……判断就会是False则不归零,再+1後变成60,在下一次loop中输出
所以出现这样子的小bug
解决方法很多,比如改变这三项行为的顺序,或是改变判断式内容都是作法
回到我们的for回圈,一样是一步一步来
先从设计"秒"的部分当开始,同样要让它能够自己去变化、归零
既然是for回圈,我们可以利用for回圈使用的三个运算式去进行之前在while的处理
sec =
0;
for (sec;
1;sec++){
cout <<sec <<endl;
sec =
59 ? sec =
0 : ;
}
这里先来说明for那个括弧内的
1 是个什麽鬼
简言之....是个
True,表示那里无条件成立,原则上这麽做几乎等同於while的写法
: 提到这个,学长code内那个 while (1)是一样的东西
当然也可以写个sec<60一类的
反正以这一小段来说,一定要是个无穷回圈才能在里面做秒的归零与变动
用sec<60的写法,就到写到分的时候再来做说明吧
至於里面那个归零的部份是三元运算子,
老师原本想说明,想说会弄复杂就之後又不说明的东西
没事就参考课本关於运算子的部份...我只是在吃晚餐,不想写成if那样好长一串
顺便复习一下三元的使用(拖走)
不过写起来感觉这东西摆在while里面比较省行数
延续下去,一样要做清除画面、拖慢时间的处理
#include<windows.h>
sec =
0;
for (sec;
1;sec++){
cout <<sec <<endl;
Sleep(
1000);
system(
"cls");
sec =
59 ? sec =
0 : ;
}
嗯,既然学长教了,没有不利用的理由
这次使用Sleep()做为拖慢时间的手段,Sleep是一个函数
这里就先认知,函数是 一段已经被写好的code,以一个单字代表 就好
然後,它的详细内容被写在windows.h里面,所以程式最前面要多一个引用宣告
简单来说,Sleep()的用法就是像code内一样在()内摆上要停多久就可以了
这个"多久"使用的是微秒,1秒 = 1000微杪,我们只要停1秒,所以里头摆1000
好...再来我们又回到写"分"的部份了,前面提过,用for回圈就要与while写点不同的
不然何必这样用个for呢?
不过在那之前,我们还是仿照while写一段
相对照可能比较好理解(?)
#include<windows.h>
sec =
0;
min =
0;
for (min;
1;min++){
for (sec;
1;sec++){
cout <<sec <<endl;
Sleep(
1000);
system(
"cls");
sec =
59 ? sec =
0 : ;
}
min =
59 ? min =0 : ;
}
其实整个运作逻辑等同while,所以就不多说明
要做说明的是下面这段
#include<windows.h>
sec =
0;
min =
0;
for (min;
1;min++){
for (sec;sec<
60;sec++){
cout <<min <<':' <<sec <<endl;
Sleep(
1000);
system(
"cls");
}
sec =
0;
min =
59 ? min =
0 : ;
}
做点小小的变化,去应用for回圈三个式子
这里的逻辑我是这样解释的:
比照时钟的转法,秒 是个在 分 底下的小循环,那就让秒在分底下跑
当秒跑到60(也就是下一分的0秒)的时候
结束这一圈秒针运行,换到下一"分"再让秒针运行
中间判断式改为<
60,就能达成在秒在60秒时结束
然後,离开这一圈时直接归零,以此确保下一圈开始时一定是0
最後一样是有关"分"的归零
毕竟在这段code的分之外没有"时",不能用现在秒的处理方法
--
是说一个回圈的解法被写完了
所以又是个以下略的好日子(?)
--
红白本命
○楽园の巫女
博丽 霊梦 职业:博丽神社の巫女さん
Hakurei Reimu 能力:主に空を飞ぶ程度の能力
@东方project系列
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.43.34.89
※ 编辑: game0416 来自: 115.43.34.89 (11/27 00:06)
※ 编辑: game0416 来自: 115.43.34.89 (11/27 00:06)
※ 编辑: game0416 来自: 115.43.34.89 (11/27 00:06)
1F:推 linjrming:题外话,我的那个程式 把s++改成++s就OK了 11/27 01:00
2F:→ game0416:那个我就当作是把 +1 摆到判断前了...所以没讲明 QQ 11/27 01:12
3F:推 j2612280:ya!!我没有24:60:60的问题XD~ 11/27 20:44