我想显示程序启动后经过的秒数:

  volatile time_t start_time = time(NULL);
  volatile time_t target_seconds = 60*60*17;
  volatile time_t time_passed = 0;
  while(1)
  {
        time_passed = time(NULL)-start_time;
        printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
  }

输出:

Time elapsed=1/61200(second)

但无论time\u传递的值是多少,它都会不断更新显示.

现在,我只想更新实际时间增加时经过的显示时间.

  volatile time_t start_time = time(NULL);
  volatile time_t target_seconds = 60*60*17;
  volatile time_t time_passed = 0;
  while(1){
      if ((time(NULL)-start_time) != time_passed)
      {
        time_passed = time(NULL)-start_time;
        printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
      }
    }

现在它什么也不显示.

推荐答案

您的代码很好.

但是,根据您的平台,只有在打印\n时才会刷新输出缓冲区.

因此,应该在printf后面加fflush(stdout);.

    if ((time(NULL)-start_time) != time_passed)
    {
      time_passed = time(NULL)-start_time;
      printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
      fflush(stdout);
    }

顺便说一句:如果你等待的时间足够长,你最终会看到一些输出,因为最终输出缓冲区将被填满,然后所有内容都会立即显示出来,这在这里当然没有多大意义.

您在代码的第一个版本中立即看到输出的原因是,您正在连续打印,因此输出缓冲区将很快满,并且将持续刷新,因此您可以看到输出.

这里不需要volatile关键字,这是绝对不必要的,但也没有坏处.

C++相关问答推荐

常数函数指针优化

Ebpf内核代码:permission denied:invalid access to map value

如何使用Python C API实现多线程程序?

为什么在函数内部分配内存空间时需要添加符号?

如何在IF语句中正确使用0.0

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

为什么即使在强制转换时,此代码也会溢出?

fwrite无法写入满(非常大)缓冲区

调用mProtection将堆栈上的内存设置为只读,直接导致程序SIGSEGV

tick.q中的Kdb+键控表语法

GTK函数调用将完全不相关的char* 值搞乱

不同原型的危险C函数是可能的

C将数组传递给函数以修改数组

无法识别C编程语言的语法,如书中所示

如何在C中定义指向函数的指针并将该指针赋给函数?

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

生成一个半RNG,结果用C表示(无随机/随机)

如何在MSVC中使用intSafe.h函数?

SSE 向量与 Epsilon 的比较

我怎样才能用c语言正常运行这两个进程?