首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fflush的时钟没有清除屏幕。

使用fflush的时钟没有清除屏幕。
EN

Stack Overflow用户
提问于 2013-10-26 04:49:08
回答 3查看 178关注 0票数 0

我试着用C制作一个时钟,但是屏幕没有正确地清除,它只是继续打印到一个新的行。我怎么不恰当地使用fflush

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    while (1) {

        time_t rawtime;
        struct tm * timeinfo;

        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
        printf ("%s", asctime (timeinfo));
        fflush(stdout);

    }
    return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-26 05:20:07

这会从上升时间字符串中去掉换行符,然后使用返回将光标推回行的开头。

代码语言:javascript
复制
#include <string.h>

int main()
{
        while (1) {

                    time_t rawtime;
                    char st[30];
                            struct tm * timeinfo;

                                    time ( &rawtime );
                                    timeinfo = localtime ( &rawtime );
                                    sprintf (st,"%s", asctime (timeinfo));
                                    *(index(st,'\n'))='\0';
                                    printf("\r%s",st);
                                    flush(stdout);
                                    sleep(1);

                  }
                                    return 0;
}
票数 2
EN

Stack Overflow用户

发布于 2013-10-26 05:43:27

这款手机的优点是,它可以从屏幕上的当前位置工作,不管它是什么。我添加了一个标签打印“时间是:”,以显示这一点。它通过从时间字符串结束时的后退间隔来实现这一点,而不是进入一个绝对屏幕位置或列。警告:在Visual下获取睡眠()的黑客尚未尝试。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#ifdef _MSC_VER
  #include <windows.h>
  #define sleep(T) Sleep((T) * 1000)
#else
  #include <unistd.h>
#endif

int main(void)
{
  char buf[42];
  time_t the_time[1];
  int i, len;

  printf("The time is: ");
  for (;;) {
    time(the_time);
    len = strlen(strcpy(buf, asctime(localtime(the_time)))) - 1;
    printf("%.*s", len, buf);
    for (i = 0; i < len; i++) putchar('\b'); 
    fflush(stdout);
    sleep(1);
  }
  return 0;
}
票数 2
EN

Stack Overflow用户

发布于 2013-10-26 05:24:16

这样就行了..。(使用一个邪恶的窗口调用SetConsoleCursorPosition(),但却能做到这一点)

代码语言:javascript
复制
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void gotoxy(int x, int y); 

int main()
{
    while (1) {

        time_t rawtime;
        struct tm * timeinfo;
        gotoxy(0,0);//set to the upper left hand corner
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
        printf ("%s", asctime (timeinfo));
        fflush(stdout);

    }
    return 0;
}

void gotoxy(int x, int y) 
{ 
    COORD pos = {x, y};
    HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(output, pos);
}

为POSIX尝试如下:

代码语言:javascript
复制
#!/usr/bin/tcc -run
#include <stdio.h>
#include <termios.h>
int main ()
{
    struct termios ts0, ts1;
    char cls [FILENAME_MAX];
    FILE *f;
    f = popen ("tput clear", "r");
    fgets (cls, FILENAME_MAX, f);
    pclose (f);
    tcgetattr (0, &ts0);
    ts1 = ts0;
    ts1.c_lflag &= ~ECHO;
    ts1.c_lflag &= ~ICANON;
    tcsetattr (0, TCSAFLUSH, &ts1);
    fputs (cls, stdout);
    while (1) putchar (getchar ());
    tcsetattr (0, TCSAFLUSH, &ts0);
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19602930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档