我正在尝试创建模拟时钟的c ++程序。它应该显示日期/时间并不断更新。我发现了一种方法可以完美地完成所有工作,但我想了解代码。我对编程非常陌生,理想情况下我想了解每一行。
我知道这行代码为将光标移回屏幕上的指定点奠定了基础 - 在我的程序中,它用于返回先前显示的“开始”和“重叠”。
void gotoxy (int x, int y)
{
COORD coord; // coordinates
coord.X = x; coord.Y = y; // X and Y coordinates
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
有人可以向我解释坐标吗?我不明白支撑背后的原因。
在main()中我有这段代码:
time_t now;
while (true)
{
gotoxy (0,0);
now = time(0);
cout << "The time is now: " << ctime(&now);
Sleep (20);
}
cin.get ();
return EXIT_SUCCESS;
我认为time_t
是C / C ++的一个函数,显示自1970年1月1日以来的经过时间。我不明白这是如何输出我当前的时间。
我试图评论一些代码,看看出了什么问题,试图弄清楚整个事情是如何运作的,但那里没有运气。我也在互联网上搜索了几个小时,一行一行,看看我能否对此有所了解。我已经到了最后的手段,我只是要求任何人帮助我理解这段代码中发生了什么。谢谢!
答案 0 :(得分:0)
I thought that time_t is a function of C/C++ that shows the elapsed time since Jan 1, 1970.
time_t
不是函数,而是arithmetic type capable of representing times
。
有关详细信息,请参阅此处:http://en.cppreference.com/w/cpp/chrono/c/time_t,
now = time(0);
返回编码为std :: time_t对象的当前日历时间。有关详细信息,请参阅此处:http://en.cppreference.com/w/cpp/chrono/c/time,时间(0)表示时间now
。
ctime(&now); //transform time now in human readable format
将time_t
值转换为字符串
将timer指向的值解释为日历时间,并将其转换为包含相应时间和日期的人类可读版本的C字符串,以本地时间表示。
返回的字符串具有以下格式:
Www Mmm dd hh:mm:ss yyyy
这里有关于ctime的更多信息:http://www.cplusplus.com/reference/ctime/ctime/
答案 1 :(得分:0)
坐标只是终端中的字符位置。 (0,0)
可能意味着回到第一个角色。这样做时,输出将覆盖控制台中的字符,给人以“更新”时间的错觉。
关于时间功能,您可以阅读ctime here的文件。它返回一个人类可读的日期格式,而不是计数器。
哪部分代码不清楚?
这是一个简单的无限循环(cin.get ();
永远不会到达,程序永远不会返回btw)。在循环内部,光标返回到行的开头,打印时间并等待20秒重复。
答案 2 :(得分:0)
要告诉SetConsoleCursorPosition
目标(x,y)是什么,你必须使用COORD
定义控制台屏幕中字符单元格的坐标 缓冲。坐标系(0,0)的原点位于左上方 缓冲区的细胞。
time_t
- 这几乎总是一个保持数量的整数值 自1970年1月1日00:00起的秒数