C语言中使用'fgets'在'printf'之后会出现问题,因为'fgets'在'printf'之前运行。

5
4个回答

7

刷新 stdout 缓冲区

fflush(stdout);

fgets(...)之前

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

1
重点不在于printffgets之后运行,而是在其之后显示输出内容

这是因为标准输出(使用printf写入的文件描述符)是行缓冲的,即标准库会推迟打印直到接收到换行符(\n)。

来自man stdout

当流stdout指向终端时,它是行缓冲的。部分行将不会出现,直到调用fflush(3)或exit(3),或者打印一个换行符。

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


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

0
printf 语句中加入一个 \n。这可能是问题所在,因为在 C 中缓冲区是以行终止的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接