为什么空的 printf 允许我继续从标准输入读取数据?

Why does an empty printf allow me to continue reading data from the stdin?

代码

while (1)
    {
        keycode = key_hook();
        if (keycode == SPACE || keycode == BKSPACE)
        {
            render_again = 1;
        }
        if (keycode == ESC)
            break;
        if (render_again)
        {
            render_again = 0;
            render(all);
        }
        dprintf(1, "");      //I have no idea why this prevents the program from freezing
    }
    int key_hook()
    {
     char buffer[4];

     read(0, buffer, 4);
     return (*(unsigned int *)buffer);
    }

好的,这段代码处理屏幕上文本的重绘。一些文本行使用 termcaps (tputs(tgetstr("us, NULL")......) 加下划线或突出显示。一切都打印正常,但在第一次重绘文本后,while 显然冻结了,除非存在 dprintf/printfkey_hook 函数只是从 stdin 中读取 4 bytes 并将它们转换为 int.

当我上次在这里工作时,我的 key_hook 版本有一个单字节读取循环。这被 1 秒的警报和到目前为止的数据是否是键前缀的逻辑打破了。

报警中断读取,停止冻结