您的位置:首页 - C++
VC预约关机代码
写着玩的,只在windows 上运行吧。当然可以改造为跨平台的,有点懒就没那么做,哈哈哈。
另外,如果程序运行时间跨度超过10个小时,将强制关机。这一点如果不喜欢可以修改。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>

#define LEN 30
#define SIZE 50

//"2013/08/23 15:00:00"
bool judge(const char*buf)
{
int i,Len;
char Tmp[LEN];
char* pBuff=new char[LEN];
char* pSub=NULL;
char* pSrc=pBuff;
SYSTEMTIME st;
unsigned short* pTime[]={&st.wYear,&st.wMonth,
&st.wDay,&st.wHour,
&st.wMinute,&st.wSecond
};
GetLocalTime(&st);
Len=strlen(buf);
strncpy(pBuff,buf,Len+1);
if(buf[4]!='/'||buf[7]!='/'
||buf[10]!=' '||buf[13]!=':'
||buf[16]!=':'||Len!=19)
{
delete [] pBuff;
return false;
}
for (i=0;i<Len;++i)
{
if (i%3==1&&i!=1)
{
continue;
}
if (!isdigit(buf[i]))
{
break;
}
}
if(i<Len)
{
delete [] pBuff;
return false;
}
//"2013/09/05 15:15:00\n"
bool valid=false;
int value=0;
for (i=0;i<6;++i)
{
memset(Tmp,'\0',LEN);
if(i<3)
{
pSrc=pBuff+i*4+(i%2==0?0:1);
pSub=pBuff+3*i+4;
}
else
{
pSrc=strchr(pBuff,' ')+1+3*(i-3);
pSub=pSrc+2;
}
memmove(Tmp,pSrc,strlen(pSrc)-strlen(pSub));
value=atoi(Tmp);
if(value<(*pTime[i]))
{
valid=false;
break;
}
else if(value==(*pTime[i]))
{
continue;
}
else
{
valid=true;
break;
}
}
if (!valid)
{
delete [] pBuff;
return false;
}
delete [] pBuff;
return true;
}

int main(void)
{
char buf[SIZE];
char InputTime[SIZE];
SYSTEMTIME st;
fputs("格式为:\"2013/09/05 18:00:00\"\n",stdout);
int internal=0;
while (1)
{
gets(InputTime);
if(!judge(InputTime))
{
printf("格式输入不正确,请重新输入:\n");
continue;
}
line:
GetLocalTime(&st);
sprintf(buf,"%02d/%02d/%02d %02d:%02d:%02d",
st.wYear,st.wMonth,st.wDay,
st.wHour,st.wMinute,
st.wSecond);
if(0==strcmp(buf,InputTime)
||internal==36000)
{//到达指定时间或者世界爱你跨度达到10个小时
break;
}
printf("%s\n",buf);
Sleep(1000);
++internal;
goto line;
}
system("shutdown -s");
return 0;
}
本站导航
相关文章
柯乐义 Copyright© keleyi.com