如果我要打印提示到stdout:fgets何时开始阅读?
printf("> ");
,然后我说
fgets(tester, 80, stdin);
将与fgets读出整条生产线包括“>”或之后将开始?
如果我要打印提示到stdout:fgets何时开始阅读?
printf("> ");
,然后我说
fgets(tester, 80, stdin);
将与fgets读出整条生产线包括“>”或之后将开始?
fgets不会读取任何内容,因为printf将在STDOUT而不是STDIN上写入。
提示是输出(在stdout
)。 fgets
正在读取输入从stdin
。所以不,它不会读你的提示。
您的终端显示stdout
,stderr
和stdin
所有在一起,但这并不意味着它们之间没有潜在的区别。
stdout
通常行缓冲,和printf("> ");
缺乏新线,因此输出可能不是终端显示器上出现,直到以后。 fflush(stdout)
以确保它在fgets()
之前输出。
printf("> ");
fflush(stdout);
fgets(tester, 80, stdin);
进一步说明:您的终端显示'stdout','stderr'和'stdin',但这并不意味着它们之间没有潜在的区别 – Alexander
@Alexander:好的。随意编辑它(即使它不是社区维基答案,但特别如此)。 –
第printf
号将反映stdout
。它永远不会影响你的stdin
。 str
缓冲区将反映您在>
之后作为输入提供的所有字符。
试验同样可以做到这样的:
#include<stdio.h>
int main() {
char str[80];
printf(">");
if(fgets (str, 60, stdin)!=NULL)
{
puts(str);
}
return 0;
}
都不是。写入'stdout'的数据通常不可用于从(同一进程的)'stdin'回读。 –