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