C - printf()不工作但puts()工作正常

时间:2015-12-18 00:35:57

标签: c

void read_class_information(head* beginning, int scale_type) {
    puts("hello");
    // printf("hello");
}

我有一个简单的函数,由main调用,printf()和fprintf()到stdout,看不到它在其中工作。另一方面,puts()工作正常。我在printf()调用或任何错误时没有打开文件。对问题可能有什么建议吗?感谢。

3 个答案:

答案 0 :(得分:3)

尝试在语句末尾使用换行符('\n'),同时确保使用相应的标题。

答案 1 :(得分:2)

因为printf()不会自动刷新输出流。另一方面,puts()在传递的字符串末尾添加一个新行'\n'。所以它有效,因为'\n'刷新了stdout

尝试

printf("hello\n");

或者,明确刷新stdout

fflush(stdout);

printf()陈述之后。

答案 2 :(得分:0)

默认情况下,流缓冲设置为行缓冲,这意味着在找到新的行字符\n之前,没有任何内容真正发送到流。三种缓冲方法是:

  • _IONBF:unbuffered
  • _IOLBF:行缓冲
  • _IOFBF:完全缓冲

您可以更改任何流的缓冲方法。在这种情况下,您可能想要更改stdout的缓冲方法:

setvbuf(stdout, (char *)NULL, _IONBF, 0);

这样,每次想要打印没有换行符的内容时,都不需要fflush(stdout);。这有一些性能问题,可能会或不会对您产生影响,因此您可以决定哪个更适合您。

像往常一样,您可以访问执行man setvbuf的文档(如果您已安装了文档)。