0

我正在尝试创建模拟时钟的 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 日以来经过的时间。我不明白它是如何输出我当前时间的。

我试图注释掉一些代码,看看出了什么问题,试图弄清楚整个事情是如何工作的,但没有运气。我还在互联网上搜索了几个小时,逐行搜索,看看我是否可以对此有所了解。我已经到了最后的手段,只是要求任何人帮助我理解这段代码中发生了什么。谢谢!

4

3 回答 3

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, 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/

于 2013-04-21T20:43:16.653 回答
0

坐标只是终端中的字符位置。(0,0)可能意味着回到第一个字符。这样做时,输出将覆盖控制台中的字符,从而产生“更新”时间的错觉。

至于时间功能,你可以在这里阅读 ctime的文档。它返回人类可读的日期格式,而不是计数器。

代码的哪一部分不清楚?

这是一个简单的无限循环(cin.get ();永远不会到达,程序永远不会返回 btw)。在循环内部,光标回到行首,打印时间并等待 20 秒重复。

于 2013-04-21T20:44:05.767 回答
0

要告诉SetConsoleCursorPosition您必须使用的目标 (x, y)COORD

定义控制台屏幕缓冲区中字符单元格的坐标。坐标系 (0,0) 的原点位于缓冲区的左上角单元格。

 

要检索时间,您可以使用 typetime_t和 function time

time_t- 这几乎总是一个整数值,保存自 1970 年 1 月 1 日 00:00 UTC 以来的秒数

于 2013-04-21T20:44:44.873 回答