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

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

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

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

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

尝试

 printf("hello\n"); 

或者,明确刷新stdout

 fflush(stdout); 

就在printf()语句之后。

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

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

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

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

这样,你就不需要fflush(stdout); 每次你想要打印没有换行的东西。 这有一些性能问题可能会或不会对您产生影响,因此您可以决定哪种方式更适合您。

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