昨天弄了一个520表白倒计时。
520已经过了,现在来写弄一个今天倒计时,
之前用system("cls")这个清屏,但是每清一次就要闪烁一次,看着就不爽,然后各种百度,现在已经解决屏幕闪烁的问题!
先上一张程序效果图吧,有图有真相!
改变字体颜色!
这里关于 SetConsoleTextAttribute函数将不作介绍,百度很多,自己百度win32 api。
好了,直接上程序源码吧,很简单的!!!编译环境为Vc++6.0简化版,32M那个。
不能编译的可能原因为 缺少
graphics.h这个头文件,解决很简单,去下载一个来就行!
#include
#include
#include
#include
#include
#include
HANDLE hOut, hIn;
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };//后边的0代表光标不可见
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void ClearScreen() //清屏 ps:比cls好,不会闪烁
{
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO sbi;
GetConsoleScreenBufferInfo(hOutput,&sbi);
DWORD len=sbi.dwSize.X*sbi.dwCursorPosition.Y+sbi.dwCursorPosition.X+1;
COORD cd={0,0};
DWORD nw;
FillConsoleOutputCharacter(hOutput,_T(' '),len,cd,&nw);
SetConsoleCursorPosition(hOutput,cd);
}
void timee(){
int h,f,s,i,j,n,k;
time_t timea;
struct tm *p;
time(&timea);
p=localtime(&timea);
h=24-p->tm_hour-1;//距离今天结束最多还有多少个小时
f=60-p->tm_min-1;//
s=60-p->tm_sec;
n=h*3600+f*60+s;
for(;n>=0;n--){
time(&timea);
Sleep(1000);
ClearScreen();
printf("\n\t\t\t现在是:%s",ctime(&timea));
if(n/3600==0){
printf("\n\n\t\t\t离明天还有:\n\n");
printf("\t\t\t%02d小时:%02d分:%02d秒",n/3600,(n%3600)/60,n%60);
printf("\n\n\n\t\t\t今天你都做了些什么?不要虚度光阴!");
}
else{
printf("\n\n\t\t\t离明天还有:\n\n");
printf("\t\t\t%02d小时:%02d分:%02d秒",n/3600,(n%3600)/60,n%60);
printf("\n\n\n\t\t\t时间正在慢慢的流逝!请抓紧时间做有用的事情!!!");
}
printf("\n\n\n\t\t\t\t甩甩制作!");
}
}
int main()
{
int f,s,i,j,n,k;
HANDLE consolehwnd; //创建句柄,详细句柄知识,请百度一下或查MSDN
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); //实例化句柄
SetConsoleTextAttribute(consolehwnd, FOREGROUND_GREEN);
//system("color 0A");
SetConsoleTitle( "今天倒计时");
HideCursor();
timee();
return 0;
}
程序不是很完整,可能出现漏洞,比如小时之间更换的时候 分钟,秒钟出现-1,-2,我稍微做了一下改变,不知道这个漏洞解决没有。
待你写出更加完美的程序。
想要实现其它倒计时程序也很简单,,,自己琢磨吧。