#include <stdioh>
#include <windowsh>
int main()
{
int min, sec, sum;
int i;
sum = 0;
printf("请输入分数和秒数: ");
scanf("%d, %d", &min, &sec);
getchar();
sum = min60+sec;
printf("你将等待%ds\n", sum);
for(i=0; i<sum; i++)
{
printf("\r还剩%ds", sum-i);
Sleep(1000);
}
return 0;
}
共勉,我也在学习阶段。
#include <timeh>
#include <stdioh>
int main(void) {
//nano time
struct timespec ts1,ts2,ts3,ts4,ts5;
int err;
err = clock_gettime(CLOCK_REALTIME,&ts1);
if(err < 0) {
return 1;
}
printf("ts1 nano:%di\n",ts1tv_nsec);
err = clock_gettime(CLOCK_REALTIME,&ts2);
if(err < 0) {
return 1;
}
printf("ts2 nano:%d\n",ts2tv_nsec);
printf("nano:ts2-ts1=%d\n",ts2tv_nsec-ts1tv_nsec);
err = clock_gettime(CLOCK_MONOTONIC,&ts3);
if(err < 0) {
return 1;
}
printf("system started time nano:%d\n",ts3tv_nsec);
err = clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&ts4);
if(err < 0) {
return 1;
}
printf("process cpu time nano:%d\n",ts4tv_nsec);
err = clock_gettime(CLOCK_THREAD_CPUTIME_ID,&ts5);
if(err < 0) {
return 1;
}
printf("thread cup time nano:%d\n",ts5tv_nsec);
return 0;
}
你用的是图形界面?
#include <dosh>
#include <timeh>
#include <conioh>
#include <stdioh>
#include <stdlibh>
#include <graphicsh>
struct ViewPort
{
int left;
int top;
int right;
int bottom;
};
struct Point
{
int x;
int y;
};
struct MyTime
{
int Hour;
int Min;
int Sec;
};
struct ViewPort AllSrc; /全屏视口/
struct ViewPort MouseBox={0,0,623,479}; /鼠标能到达的最大视口/
struct ViewPort TimeBox={428,25,600,55}; /时间视口/
struct Point Mouse,lastpos; /鼠标重绘时用,记录鼠标的当前位置和上一位置/
struct MyTime timer;
voidbitmap; /保存鼠标上一位置的位图(除去鼠标本身)/
char ARROR1[]={
/以下是 鼠标箭头 的 16点阵 字模,128 byte ,横向,自己绘制/
0xe0,0x00,
0xfe,0x00,
0xff,0xf0,
0x7f,0xfe,
0x7f,0xf0,
0x7f,0x00,
0x7f,0x00,
0x3f,0x80,
0x39,0xc0,
0x38,0xe0,
0x38,0x70,
0x38,0x38,
0x10,0x1c,
0x10,0x0e,
0x10,0x06,
0x00,0x00
};
void drawHanzi(char mat,int matsize,int x,int y,int color) /从字模点阵数组中获得字模,显示汉字/
/依次:字模指针、点阵大小、起始坐标(x,y)、颜色/
{
int i,j,k,n;
n=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<n;i++)
for(k=0;k<8;k++)
if(mat[jn+i]&(0x80>>k)) /测试为1的位则显示/
putpixel(x+i8+k,y+j,color);
}
void MouseSetXY(int x,int y) /设置鼠标的位置/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
Mousex=x;
Mousey=y;
}
void MouseGetXY() /获取鼠标的位置/
{
_AX=0x03;
geninterrupt(0x33);
Mousex=_CX;
Mousey=_DX;
}
int LeftPress() /判断鼠标左键是否被按下/
{
_AX=0x03;
geninterrupt(0x33);
return (_BX&1);
}
int RightPress() /判断鼠标右键是否被按下/
{
_AX=0x03;
geninterrupt(0x33);
return (_BX&2);
}
void SetMouseXRange(int min,int max) /设置鼠标横向坐标范围/
{
_AX=0x07;
_CX=min;
_DX=max;
geninterrupt(0x33);
}
void SetMouseYRange(int min,int max) /设置鼠标纵向坐标范围/
{
_AX=0x08;
_CX=min;
_DX=max;
geninterrupt(0x33);
}
int bFirst=1;
void DrawMouse() /在Mouse对应坐标处绘制鼠标/
{
if(bFirst)
{
bFirst=0;
getimage(Mousex,Mousey,Mousex+15,Mousey+15,bitmap);
drawHanzi(ARROR1,16,Mousex,Mousey,YELLOW);
}
else
{
putimage(lastposx,lastposy,bitmap,COPY_PUT);
getimage(Mousex,Mousey,Mousex+15,Mousey+15,bitmap);
drawHanzi(ARROR1,16,Mousex,Mousey,YELLOW);
}
lastposx=Mousex;
lastposy=Mousey;
}
void HideMouse() /隐藏鼠标/
{
putimage(lastposx,lastposy,bitmap,COPY_PUT);
bFirst=1;
}
void SetViewPort(struct ViewPort p) /设置视口/
{
setviewport(pleft,ptop,pright,pbottom,1);
}
void SetMouseRange(struct ViewPort p)
{
SetMouseXRange(pleft,pright);
SetMouseYRange(ptop,pbottom);
}
void TimeAdd(struct MyTime pt)
{
pt->Sec++;
if(pt->Sec>59)
{
pt->Sec=0;
pt->Min++;
if(pt->Min>59)
{
pt->Min=0;
pt->Hour++;
}
}
}
void FormatTime(char st,struct MyTime t)
{
sprintf(st,"%d:%2d:%2d",tHour,tMin,tSec);
}
void DrawTop()
{
char st[24];
long ti,last=time(NULL);
int starty=5;
int startx=200,endx=418;
struct time tm,lasttm;
struct time tm_click,lasttm_click;
gettime(&lasttm);
while(!kbhit())
{
SetViewPort(AllSrc);
setlinestyle(SOLID_LINE,NULL,THICK_WIDTH);
setfillstyle(0,YELLOW);
MouseGetXY();
gettime(&tm);
if( ((tmti_sec-lasttmti_sec)100+tmti_hund-lasttmti_hund)>10)
{
DrawMouse();
lasttm=tm;
}
ti=time(NULL);
if(ti!=last)
{
SetViewPort(TimeBox);
TimeAdd(&timer);
FormatTime(st,timer);
setcolor(RED);
clearviewport();
outtextxy(2,2,st);
last=ti;
}
}
}
main()
{
int driver,mode;
driver=VGA;
mode=VGAHI;
timerHour=0;
timerMin=0;
timerSec=0;
initgraph(&driver,&mode,"E:\\TC3\\BGI");
AllSrcleft=0;
AllSrctop=0;
bitmap=malloc(imagesize(0,0,15,15));
AllSrcright=getmaxx();
AllSrcbottom=getmaxy();
setbkcolor(LIGHTGRAY);
SetMouseRange(MouseBox);
MouseSetXY(100,100);
SetViewPort(AllSrc);
DrawTop();
closegraph();
return 0;
}
CLOCK()函数:
clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock(void) ;
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型,在timeh文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明显,clock_t是一个长整形数。在timeh文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:
void elapsed_time()
{
printf("Elapsed time:%u secs\n",clock()/CLOCKS_PER_SEC);
}
当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include <stdioh>
#include <stdlibh>
#include <timeh>
int main(void)
{
long i = 10000000L;
clock_t start, finish;
double duration;
/ 测量一个事件持续的时间/
printf( "Time to do %ld empty loops is ", i) ;
start = clock();
while( i-- );
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}
在笔者的机器上,运行结果如下:
Time to do 10000000 empty loops is 003000 seconds
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
time_t time( time_t timer );
返回值是1970年到现在的秒数 用long型接就可以了
参数也是同样意义
如
long time_s = 0;
time_s = time( NULL );
// time_s就是1970年到现在的秒数
或者
long time_s = NULL;
time(time_s);
// time_s就是1970年到现在的秒数
要计算前后一段时间的话之前取一次time,之后取一次相减就知道用了多少秒了
#include <stdioh>
#include <stdlibh>
#include <timeh>
void main()
{
unsigned char time1[] = { 10, 8, 31, 9, 26 };
unsigned char time2[] = { 10, 8, 31, 9, 50 };
struct tm t1 = {0};
struct tm t2 = {0};
time_t _t1;
time_t _t2;
double diff;
t1tm_year = time1[0] + 100;
t1tm_mon = time1[1];
t1tm_mday = time1[2];
t1tm_hour = time1[3];
t1tm_min = time1[4];
t2tm_year = time2[0] + 100;
t2tm_mon = time2[1];
t2tm_mday = time2[2];
t2tm_hour = time2[3];
t2tm_min = time2[4];
_t1 = _mkgmtime( &t1 );
_t2 = _mkgmtime( &t2 );
diff = difftime(_t2, _t1 );
printf( "相差 %0f 分钟\n", diff / 60 );
}
扩展资料:
C语言中有两个相关的函数用来计算时间差,分别是:
time_t time( time_t t) 与 clock_t clock(void)
头文件: timeh
计算的时间单位分别为: s , ms
time_t 和 clock_t 是函数库timeh 中定义的用来保存时间的数据结构
返回值:
1、time : 返回从公元1970年1月1号的UTC时间从0时0分0秒算起到现在所经过的秒数。如果参数 t 非空指针的话,返回的时间会保存在 t 所指向的内存。
2、clock:返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。 1单元 = 1 ms。
所以我们可以根据具体情况需求,判断采用哪一个函数。
具体用法如下例子:
#include <timeh>
#include <stdioh>
#include <stdlibh>
int main()
{
time_t c_start, t_start, c_end, t_end;
c_start = clock(); //!< 单位为ms
t_start = time(NULL); //!< 单位为s
system("pause");
c_end = clock();
t_end = time(NULL);
//!<difftime(time_t, time_t)返回两个time_t变量间的时间间隔,即时间差
printf("The pause used %f ms by clock()\n",difftime(c_end,c_start));
printf("The pause used %f s by time()\n",difftime(t_end,t_start));
system("pause");
return 0;
}
因此,要计算某一函数块的占用时间时,只需要在执行该函数块之前和执行完该函数块之后调用同一个时间计算函数。再调用函数difftime()计算两者的差,即可得到耗费时间。
C语言中的头文件timeh中定义了库函数clock(),
它返回的是从程序运行开始算起的时间,一时钟周期为单位,
timeh还定义了符号:CLOCKS_PER_SEC,
即一秒钟的时钟周期。这样就简单了,
在头文件中加入#include<timeh>,在程序main()主函数的开头定义long now=0;
并给把clock()赋值给now,即now=clock();记录程序开始时的时间,clock()会继续增加,
但now已经确定为开始那一时刻clock()的值,
在程序结尾,算式clock()-now就是程序执行所需的时间,
但是是以时钟周期为单位的,
如果想得到以秒为单位的时间只要输出(clock()-now)/CLOCKS_PER_SEC就是了,
即在程序结尾添加
printf("%f",(clock()-now)/CLOCKS_PER_SEC);就可以了。
以上就是关于c语言倒计时程序设计:要求从键盘输入倒计的时间分数和秒数,按“回车键”开始倒计,直到计时时间结束。全部的内容,包括:c语言倒计时程序设计:要求从键盘输入倒计的时间分数和秒数,按“回车键”开始倒计,直到计时时间结束。、如何建立C语言程序内部精确计时器、求高手啊,用C语言编写一个计时程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)