jcx106的计时器(2.0版)
2026-07-18 14:04:58
发布于:浙江
- 程序完全由我独自编写,用了 AI 检查 bug,但是没有使用 AI 生成代码。另:gc函数是现学现编的。
- 因为家里的 Windows 11 电脑(也有可能是 Dev-C++ 6.3)输出中文会变成乱码,为了把提示词翻译成英文,我也是拿出了自己的毕生所学。
- 代码仅支持 Windows 系统,没有用 Windows 的请自行使用其它工具。
- 版本更新:相对于 1.0 版将 Sleep 延时结束计时改成了按任意键结束。
代码:
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#define int long long
using namespace std;
int md,hh,mm,ss;
double gc(){
LARGE_INTEGER f,n;
QueryPerformanceFrequency(&f);
QueryPerformanceCounter(&n);
return (double)n.QuadPart/f.QuadPart*1000.0;
}
void OvO(int fps){
int a=gc(),b;
int v=1000/fps,d=1,n=10;
while(!_kbhit()){
b=gc();
double l=(b-a)/1000.0;
printf("%.3lf",l);
Sleep(v);
if(l>=n)
d++,n*=10;
for(int i=1;i<=d;i++)
putchar('\b');
printf("\b\b\b\b");
}
int c=_getch();
while(!_kbhit);
c=_getch();
return;
}
void QwQ(int os,int fps){
os--;
int a=gc(),b,ch;
int v=1000/fps;
while(1){
b=gc();
double l=(b-a)/1000.0;
int ls=os-floor(l);
if(ls<0) break;
printf("%02lld:%02lld:%02lld",ls/3600,ls%3600/60,ls%60);
Sleep(v);
if(_kbhit()){
int c=_getch();
goto ll;
}
printf("\b\b\b\b\b\b\b\b");
}
printf("Bingo! ");
while(!_kbhit()) continue;
ch=_getch();
ll:
return;
}
signed main(){
while(true){
system("cls");
printf("Please select mode:\n1. Stopwatch\n2. Countdown\n3. Exit\n");
scanf("%lld",&md);
goto cn;
er:
printf("Invalid input, please select mode again:\n1. Stopwatch\n2. Countdown\n3. Exit\n");
scanf("%lld",&md);
goto cn;
cn:
system("cls");
if(md<1 || md>3)
goto er;
else if(md==1)
OvO(60);
else if(md==2){
printf("Please enter countdown time(hh:mm:ss):\n");
scanf("%lld:%lld:%lld",&hh,&mm,&ss);
system("cls");
QwQ(hh*3600+mm*60+ss,60);
}
else
return 0;
}
}
全部评论 2
- 置顶
为了罐头,点赞+评论
昨天 来自 浙江
4啥阴
23小时前 来自 安徽
2
为了罐头,点赞+评论
昨天 来自 浙江
3





























有帮助,赞一个