使用坐标和time_t的时钟程序

时间:2013-04-21 20:38:19

标签: c++ c

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

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

3 个答案:

答案 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和功能time

  

time_t - 这几乎总是一个保持数量的整数值   自1970年1月1日00:00起的秒数