在’printf’之后使用’fgets’作为’fgets’在C语言中出现’fgets’在’printf’之前运行

可能重复:
除非换行符在格式字符串中,为什么printf在调用后不会刷新? (在C中)

我在使用printffgets时遇到问题,因为在我的代码中, 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; } 

刷新stdout

 fflush(stdout); 

fgets(...)之前fgets(...)

 printf("Type a String: "); fflush(stdout); fgets(string, max_string, stdin); 

把一个\n放在printf语句中。 这可能是问题,因为C缓冲区是行终止的。

尼尔是对的。 如果你只想写下一些东西而不必把它放在’\ n’你可以使用函数write();

 #include  #include  #include  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; } 

关键不是printffgets之后运行,而是在它之后显示它的输出

发生这种情况是因为标准输出 (您使用printf编写的文件描述符)是行缓冲的,即标准库在收到换行符( \n )进行打印后推迟打印。

来自man stdout

当流stdout指向终端时,它是行缓冲的。 在调用fflush(3)或exit(3)或打印换行符之前,不会出现部分行。

要调查不同的结果,请编辑您的示例以使用fflush ,或使用fprintf(stderr, ...打印标准错误)。