C fgets何时开始阅读?

C fgets何时开始阅读?,c,C,如果要将提示打印到标准输出: printf("> "); 然后我说 fgets(tester, 80, stdin); fgets会读取包括“>”在内的整行吗?还是会在这之后开始?fgets不会读取任何内容,因为printf将在STDOUT上而不是在STDIN上写入。提示是输出(在STDOUT上)fgets正在从stdin读取输入。所以不,它不会读取您的提示 您的终端同时显示stdout、stderr和stdin,但这并不意味着它们之间没有根本的区别 stdout通常是行缓冲的,p

如果要将提示打印到标准输出:

printf("> ");  
然后我说

fgets(tester, 80, stdin);

fgets会读取包括“>”在内的整行吗?还是会在这之后开始?

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

提示是输出(在
STDOUT
上)
fgets
正在从
stdin
读取输入。所以不,它不会读取您的提示

您的终端同时显示
stdout
stderr
stdin
,但这并不意味着它们之间没有根本的区别

stdout
通常是行缓冲的,
printf(“>”)缺少新行,因此输出可能直到稍后才会显示在终端显示器上
fflush(stdout)
以确保在
fgets()之前输出


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

同样的测试可以这样做:

#include<stdio.h>

int main() {

char str[80];
printf(">");
if( fgets (str, 60, stdin)!=NULL ) 
   {
      puts(str);
   }
   return 0;
}
#包括
int main(){
char-str[80];
printf(“>”);
如果(fgets(str,60,stdin)!=NULL)
{
put(str);
}
返回0;
}

两者都不是。写入
stdout
的数据通常根本无法从(同一进程的)
stdin
读取。进一步说明:您的终端同时显示
stdout
stderr
stdin
,但这并不意味着它们之间没有根本区别them@Alexander:说得好。请随意在中编辑(即使这不是一个社区维基答案,但尤其是它本身)。
#include<stdio.h>

int main() {

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