【问题标题】:Working along with digital clock与数字时钟一起工作
【发布时间】:2015-07-14 16:58:38
【问题描述】:

以下程序是一个简单的数字时钟 我希望时间与系统时间持续同步,并将其显示在控制台顶部,而不会干扰我的其他工作,因为在这种情况下,您可以看到最后一行的“hello”永远不会打印为 while它上面的循环永远不会结束,并且每次循环都会清除屏幕。

我希望我的代码也能在 while 循环之外执行指令,但是 它永远不会到达那个点,因为 while 循环永远不会在这个程序中结束

#include <ctime>
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{


 bool loop = true;


 while (loop)
 {


   time_t now = time ( 0 );
   tm *local = localtime ( &now );

    local->tm_hour -= 6;

    system("cls");
    cout << ctime ( &now ) <<'\n';
    cout<<"check";
    Sleep(1000);


 }
 cout<<"hello";//this is not printed as while loop doesnt ends
  cin.get();

  return 0;


}

【问题讨论】:

  • 不知道这是怎么做到的。即使您可以异步运行时钟(您可以在不同的线程中执行此操作),您也会不断清除控制台,那么您如何查看任何其他输入/输出流?
  • 是否有任何其他替代方法可以让我执行其他指令,同时时间显示在顶部?
  • 请记住,睡眠时间通常是最短的且不准确。例如,处理器可以休眠 1030 毫秒而不是 1000 毫秒;因为它满足了 1000 毫秒的最低要求。
  • 如果您找到一个现有的应用程序或小部件来执行此操作,生活会更轻松。

标签: c++ time clock


【解决方案1】:

循环没有结束的原因是你没有结束它。 您在开始时将loop 设置为true,并且只要它保持为true 就会循环。但是,您实际上从未将其设置为 false。

如果您的目标是创建一个在命令行顶部运行的时钟,那将有点困难,但并非不可能。

基本上,您需要做的是使用像ncurses 这样的格式库来不断地将光标放在要打印时间的行上,使用clrtoeol 清除该行,打印时间,然后将光标设置回最后一行。您还必须在主循环中放置一些内容,以获取用户的输入并将其发送到 shell 解释器,如下所示:

std::string command;
cin >> command;
system(command.c_str());

不过,总体而言,使用 unix date 命令可能更容易,如下所示:

date "%H:%M:%S"

每次您都需要知道现在几点。

【讨论】:

  • 我不认为他正在运行基于 unix 的操作系统,(看来他正在包括 windows 标头。) DOS 日期命令在:computerhope.com/datehlp.htm 进行了解释。根据这个“日期/T”会达到同样的效果。
  • 我用的是windows操作系统,其实是windows 8
猜你喜欢
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 2023-02-02
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多