【问题标题】:Modify a previously written line in console C Codeblocks修改控制台 C 代码块中先前编写的行
【发布时间】:2013-12-12 03:03:21
【问题描述】:

我正在做一个小测试应用程序,我想知道是否有任何方法可以删除控制台中以前打印的行。我真正希望实现的是在控制台的右上角向用户显示倒计时。我我在 C 而不是 C++ 中工作,并且使用 Codeblocks,这并不相关。

谢谢!

【问题讨论】:

  • 我建议为您的平台寻找一个 curses(或 ncurses)库。另请注意 - 您的问题与代码块完全无关 - 这是一个 IDE,而不是打印/更改打印/运行算法/您可以在代码中执行的任何其他操作的方法。

标签: c console codeblocks


【解决方案1】:

当您写入控制台时,您真正在做的是写入对应于标准输出和标准错误的文件句柄。如果您正在写入一个未实时呈现给用户的文件,那么在写入某些内容后“备份”并用新数据覆盖文件的某些部分并不是什么大不了的事。但是,由于写入 stdout / stderr 的字符会立即呈现给用户,因此没有一种简单的方法可以“备份”并将新数据写入控制台。

一种可行的解决方案是计算控制台的大小,并在每次您想要更新值时打印出足够的空白来填满控制台。例如,如果您知道用户的控制台有 20 行高,并且您想在控制台的左上角显示一些更新值,您可以打印出 20 个换行符,然后是您想要输出的任何数据。但是,这也意味着您在控制台中显示的任何其他数据也必须再次打印出来。这可能最终会比预期的更慢和更丑陋。

我建议按照 mah 的建议尝试一个 curses 库。 Here 很好地概述了如何开始使用 ncurses。

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int i, c = 80;
        char *cp = getenv("COLUMNS");
        if (cp) c = atoi(cp);
        for (i = 10; printf("%*d\r", c-1, i), fflush(stdout), i; --i) sleep(1);
        printf("\n");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2018-07-10
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2016-07-30
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多