0. 引言
本章主要讲解如何自制一个用于倒计时的计时器。
前置芝士:
1. 给予用户提示与输入处理时间
对于每个初学 C++ 的读者,必定都计算过时分秒。
那为了倒计时时的可读性,我们这边将输入的秒数转换为 hh:mm:ss
的形式。
puts("I am Timer. Please tell me your time (seconds): ");
int n;
scanf("%d",&n);
int rsth=n/3600,rstm=n/60%60,rsts=n%60;//直接计算
2. 预备倒计时
利用 Sleep()
进行倒数
3
s
3\text s
3s,这里不再赘述方法。
开始时,便用 system("cls");
清空屏幕开始计时。
puts("OK. Are you ready?");
for(int i=3;i;i--)
{
Sleep(1000);//等待 1s
cout<<i<<endl;
}
system("cls");//清屏
puts("Start!");
3. 开始计时
外面一个循环——当
r
s
t
h
,
r
s
t
m
,
r
s
t
s
rsth,rstm,rsts
rsth,rstm,rsts 中有至少一个非零,则继续倒计时(废话。
将变量减少时,可以模拟一下,类似六十进制,不足零就向前面一个借
1
1
1 当
60
60
60。
然后输出,接着再等待
1
s
1\text s
1s,清空,再执行。
while(rsth||rstm||rsts)
{
if(!rsts)
{
rsts=59;
if(!rstm) rstm=59,rsth--;
else rstm--;
}
else rsts--;//减少 1s
printf("%02d:%02d:%02d",rsth,rstm,rsts);
Sleep(1000);
system("cls");
}
4. 计时结束的提示
为了防止用户走神,我们在输出提示后使用 Beep()
以提示。
puts("Time over!");
Beep(1000,1000);
Beep(1000,1000);
Beep(1000,1000);//连续发声三次
示例代码:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main()
{
puts("I am Timer. Please tell me your time (seconds): ");
int n;
scanf("%d",&n);
int rsth=n/3600,rstm=n/60%60,rsts=n%60;
puts("OK. Are you ready?");
for(int i=3;i;i--)
{
Sleep(1000);
cout<<i<<endl;
}
system("cls");
puts("Start!");
while(rsth||rstm||rsts)
{
if(!rsts)
{
rsts=59;
if(!rstm) rstm=59,rsth--;
else rstm--;
}
else rsts--;
printf("%02d:%02d:%02d",rsth,rstm,rsts);
Sleep(1000);
system("cls");
}
puts("Time over!");
Beep(1000,1000);
Beep(1000,1000);
Beep(1000,1000);
return 0;
}
5. 后记
这样,一个简易的计时器便做好了,相信读者收获的许多。
最后,感谢大家的支持!