问题在C语言中使用“与fgets“printf的”为”与fgets“printf的” [复制]之前运

2019-06-26 10:28发布

可能重复:
为什么不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;
}

Answer 1:

做的冲洗stdout

fflush(stdout);

之前fgets(...)

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


Answer 2:

\nprintf声明。 在这可能是问题C缓冲区行终止。



Answer 3:

尼尔是正确的。 如果你想只写下来的东西,而不必把那个“\ n”你可以使用函数写();

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


Answer 4:

问题的关键不在于printf后运行fgets ,而是之后,它会显示其输出

这是因为标准输出 (你有写文件描述符printf )是行缓冲,即标准库延迟一个换行符(后打印\n )已收到打印。

man stdout

流stdout是行缓冲时它指向一个终端。 局部线将不会出现,直到fflush(3)或出口(3)被调用时,或印刷有换行符。

为了研究不同的结果,编辑您例如使用fflush ,或使用标准错误打印fprintf(stderr, ...



文章来源: Issue in C language using 'fgets' after 'printf' as 'fgets' runs before 'printf' [duplicate]
标签: c printf fgets