【问题标题】:Timer using a time function in C [duplicate]在C中使用时间函数的定时器[重复]
【发布时间】:2021-06-09 10:51:12
【问题描述】:

我想打印一行,然后在十秒钟后将其擦除。 所以我认为我应该编写一个计时器作为初步程序,并在以后使用我在互联网上找到的任何内容进行擦除(例如使用\r)。 所以我想打印“我爱玉米片”,十秒钟后打印“我讨厌玉米片”。 然而,即使printf("I love nachos") 写在任何条件之前,程序也会在十秒后打印这两个字符串。

#include <stdio.h>
#include <time.h>
int main(void) {
  printf("I love nachos");
  time_t now = time(NULL);
  while (1)
  {
  time_t future = time(NULL);
    if ((future-now)==10)
      {
       break;
      }
  }
  printf("I hate nachos");
  return 0;
}

我请朋友解决这个问题,他写道:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    printf("Start\n");

    time_t t0 = time(NULL);

    while ( (difftime(time(NULL), t0)) <= 10.0 )
    {}

    printf("End");

    return 0;
}

但是,在这种情况下,该程序仅适用于 printf("Start\n") 中的 \n。 如果我删除\n,我会得到与我的初始代码相同的结果,我显然不希望\n在那里,因为我无法用\r删除该行

【问题讨论】:

  • 我建议不要在循环中忙于等待,而是使用sleep/nanosleep (POSIX) 或 Sleep (Windows) 之类的函数

标签: c time timer


【解决方案1】:

printf 输出到stdout 默认情况下是行缓冲的。这意味着在内部缓冲区已满添加换行符文件关闭(程序退出时隐式发生)之前,实际上没有发送任何内容

所以要么添加换行符,要么使用fflush 强制缓冲区立即传输到输出。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多