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
的文档(当然,如果您安装了文档)。