4个回答
展开全部
1、用sleep延时刷新并获取系统时间来显示。
2、例程:
#include<graphics.h>
#include<math.h>
#include<dos.h>
#define PI 3.1415926
//屏幕中心的坐标(640X480模式下)
#define mid_x 320
#define mid_y 240
int main()
{ int graphdriver=DETECT,graphmode;
int end_x,end_y;
struct time curtime;
float th_hour,th_min,th_sec;
initgraph(&graphdriver,&graphmode,"C:\\TC2"); //初始化VGA屏幕模式
setbkcolor(BLACK); //使用黑色的背景色
while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序
{ setcolor(GREEN); //把画笔设为绿色
circle(mid_x,mid_y,180); //钟的外圆
circle(mid_x,mid_y,150); //钟的内圆
circle(mid_x,mid_y,1); //画出钟的圆心
gettime(&curtime); //取得系统当前时间
th_sec=(float)curtime.ti_sec*0.1047197551; //把秒针的角度化为弧度,为以后绘制时方便,下同
th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0; //分针的弧度
th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0; //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5
//计算出时针的尾的坐标(时针长70)
end_x=mid_x+70*sin(th_hour);
end_y=mid_y-70*cos(th_hour);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //用红色线画出时针
//计算出分针坐标(分针长110)
end_x=mid_x+110*sin(th_min);
end_y=mid_y-110*cos(th_min);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //用红色画出分针
end_x=mid_x+140*sin(th_sec);
end_y=mid_y-140*cos(th_sec);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //同上,画出秒针,长为140
//画出钟盘上的刻度,刻度长20
line(140,240,160,240); //9点对应的大刻度
line(320,60,320,80); //12点对应的大刻度
line(500,240,480,240); //3点的刻度
line(320,420,320,400); //6点的刻度
line(410,395.7,400,378.4); //5点
line(475.7,330,458.4,320); //4点
line(475.7,150,458.4,160); //2点
line(410,84.3,400,101.6); //1点
line(230,84.3,240,101.6); //11点
line(164.3,150,181.6,160); //10点
line(164.3,330,181.6,320); //8点
line(230,395.7,240,378.4); //7点
sleep(BLUE); //这里应该是打错,停止一秒,应为sleep(1000)
cleardevice(); //清除屏幕上的显示
}
closegraph(); //关闭VGA屏幕,即返回文本方式
return 0;
}
展开全部
如果你要按楼上那种用sleep的方法模拟时钟的话,误差很大的,你可以实时对照着系统时间可以下就知道了,超过两分钟时间误差差3-4秒不成问题,如果你对时间准确性不要求的话,只是仅仅模拟的话那倒还凑合用!否则那你必须这样做:用sleep延时刷新并获取系统时间来显示
#include <afx.h>
#include <stdio.h>
int main()
{
while(true)
{
CTime ti=CTime::GetCurrentTime();
CString s_time;
s_time = ti.Format("%H:%M:%S");
printf("%s",s_time);
Sleep(500);
system("cls");
}
return 0;
}
#include <afx.h>
#include <stdio.h>
int main()
{
while(true)
{
CTime ti=CTime::GetCurrentTime();
CString s_time;
s_time = ti.Format("%H:%M:%S");
printf("%s",s_time);
Sleep(500);
system("cls");
}
return 0;
}
追问
最好用display函数,update函数和delay函数,您能帮下忙吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没说具体要求,就只简单的实现了下大概功能,测试了下1分钟没问题,1小时时间太长没看,应该没问题;
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
int a=0,b=0,c=0;
while(true)
{
printf("%02d:%02d:%02d",a,b,c);
c++;
Sleep(1000);
system("cls");
if(c==60)
{
b++;
c=0;
if(b==60)
{
a++;
b=0;
c=0;
if(a==24)
{
a=0;
b=0;
c=0;
}
}
}
}
return 0;
}
追问
这是我们的一道练习题,没有什么要求,模拟出来就可以,老师给了我们一些提示,用display函数,update函数和delay函数,您能帮下忙吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
int hour, minute, second;
void update()
{
second++;
if(second ==60)
{
second =0;
minute++;
}
if(minute ==60)
{
minute =0;
hour++;
}
if(hour ==24)
{
hour =0;
}
}
void display()
{
printf("%2d ;%2d; %2d\r",hour,minute,second);
}
void delay()
{
int t;
for(t=0;t<100000000;t++);
}
int main()
{
int i;
for(i=0;i<100000;i++)
{
update();
display();
delay();
}
return 0;
}
这个完全符合要求
#include <stdlib.h>
int hour, minute, second;
void update()
{
second++;
if(second ==60)
{
second =0;
minute++;
}
if(minute ==60)
{
minute =0;
hour++;
}
if(hour ==24)
{
hour =0;
}
}
void display()
{
printf("%2d ;%2d; %2d\r",hour,minute,second);
}
void delay()
{
int t;
for(t=0;t<100000000;t++);
}
int main()
{
int i;
for(i=0;i<100000;i++)
{
update();
display();
delay();
}
return 0;
}
这个完全符合要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询