c - 在控制台中移动光标和打印字符不适用于睡眠
问题描述
我想在同一个地方一个一个地打印一系列字符。我打印一个字母,然后在睡眠状态下等待 1 秒,使用控制台代码将光标向左移动一列,打印下一个字母,依此类推。问题是结果程序等待所有睡眠的总和(在我的示例中为 2 秒),然后仅打印最后一个字符('y')。nanosleep 也是如此,等待信号而不是睡眠。如何让它发挥作用?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
printf( "H" );
sleep( 1 );
printf( "\033[1D" );
printf( "e" );
sleep( 1 );
printf( "\033[1D" );
printf( "y" );
}
解决方案
默认情况下(当连接到终端时)输出到stdout
(这是printf
写入的地方)line buffered。这意味着当缓冲区已满、打印换行符或显式刷新它时(使用 )刷新输出(实际上写入终端fflush
)。
在您的情况下,由于您从不填充缓冲区并且不打印换行符,因此您需要fflush(stdout)
在每次调用之前显式调用sleep
.
推荐阅读
- javascript - 对 Datepicker 进行限制的忍者形式
- css - 如何将下拉菜单放在导航栏中?
- python - Python:通过href查找元素
- mysql - Mysql Cluster 数据 ndoe 无法启动连接到管理节点
- python - 在嵌套列表中拆分字符串
- c++ - 如何在 Qt 中设置 QToolButton 填充侧边栏(QDockWidget)?
- sql - 如何在 SQL 中获取所选日期与前 1 个月之间的差异
- php - Laravel 护照安装在动态数据库上
- asp-classic - Asp classic 不使用方括号进行迭代
- html - 如何在不嵌入的情况下运行用户在您的网页上输入的 youtube url 链接