可能重复:
Why does printf not flush after the call unless a newline is in the format string? (in C)
我在使用printf
和fgets
时出现问题,因为我的代码printf
早于fget编写但它没有运行,它在fgets
运行之后运行。
enum { max_string = 127 };
static char string[max_string+1] = "";
int main( int argc, char ** argv ) {
printf("Type a String: ");
fgets(string, max_string, stdin);
printf("The String is %s\n", string);
return 0;
}
答案 0 :(得分:6)
刷新stdout
fflush(stdout);
之前fgets(...)
printf("Type a String: ");
fflush(stdout);
fgets(string, max_string, stdin);
答案 1 :(得分:0)
在\n
语句中添加printf
。这可能是问题,因为C
缓冲区是行终止的。
答案 2 :(得分:0)
Neel是对的。如果你想写一些东西而不必把它放在'\ n'你可以使用函数write();
#include <stdio.h>
#include <unistd.h>
#include <string.h>
enum { max_string = 127 };
static char string[max_string+1] = "";
my_putstr(char *str)
{
write(1, str, strlen(str));
}
int main( int argc, char ** argv ) {
my_putstr("Type a String: ");
fgets(string, max_string, stdin);
printf("The String is %s\n", string);
return 0;
}
答案 3 :(得分:0)
要点不是printf
在fgets
之后运行,而是其输出显示在它之后。
这是因为标准输出(您使用printf
编写的文件描述符)是行缓冲的,即标准库在换行符后延迟打印({{1已收到打印。
来自\n
:
当流stdout指向终端时,它是行缓冲的。 在调用fflush(3)或exit(3)之前,不会出现部分行,或者 打印换行符。
要调查不同的结果,请修改您的示例以使用man stdout
,或使用fflush
打印标准错误。