2017-03-10 28 views
-1

如果我要打印提示到stdout:fgets何时开始阅读?

printf("> "); 

,然后我说

fgets(tester, 80, stdin); 

将与fgets读出整条生产线包括“>”或之后将开始?

+1

都不是。写入'stdout'的数据通常不可用于从(同一进程的)'stdin'回读。 –

回答

0

fgets不会读取任何内容,因为printf将在STDOUT而不是STDIN上写入。

5

提示是输出(在stdout)。 fgets正在读取输入stdin。所以不,它不会读你的提示。

您的终端显示stdoutstderrstdin所有在一起,但这并不意味着它们之间没有潜在的区别。

stdout通常行缓冲,和printf("> ");缺乏新线,因此输出可能不是终端显示器上出现,直到以后。 fflush(stdout)以确保它在fgets()之前输出。

printf("> "); 
fflush(stdout); 
fgets(tester, 80, stdin); 
+2

进一步说明:您的终端显示'stdout','stderr'和'stdin',但这并不意味着它们之间没有潜在的区别 – Alexander

+1

@Alexander:好的。随意编辑它(即使它不是社区维基答案,但特别如此)。 –

0

printf号将反映stdout。它永远不会影响你的stdinstr缓冲区将反映您在>之后作为输入提供的所有字符。

试验同样可以做到这样的:

#include<stdio.h> 

int main() { 

char str[80]; 
printf(">"); 
if(fgets (str, 60, stdin)!=NULL) 
    { 
     puts(str); 
    } 
    return 0; 
}