终端上不打印单个字符

时间:2011-09-26 18:59:25

标签: c printf

我有3个不同的进程,使用printf打印出单个字符。但我在终端看不到它们。当我添加换行符printf("\n H")以便每个字符都在新行上时,我可以看到它们。如果没有换行符,为什么它不起作用?

3 个答案:

答案 0 :(得分:5)

这是一个冲动的问题。如果在每个printf之后刷新缓冲区,则应该使输出更接近您想要的输出。要刷新标准输出,只需执行fflush( stdout )

答案 1 :(得分:3)

C标准为输出流定义了3种缓冲类型:

  • 无缓冲→无缓冲
  • 行缓冲→缓冲,直到看到换行符
  • 完全缓冲→缓冲到缓冲区大小

可以通过setvbuf(3)setbuf(3)函数更改输出流的缓冲类型。

C标准要求stderr在启动时不能完全缓冲(在许多实现中通常没有缓冲,以便尽快看到错误);并且stdout只有在可以确定不引用终端时才被完全缓冲(当它引用终端时,许多实现将其初始化为行缓冲,这就是你所看到的)。

答案 2 :(得分:-1)

使用'写(1,& c,1)'系统调用,或

fprintf(stderr,'%c', c);