fscanf(file,"%d %d",&int_var1,&int_var_2); `
fscanf(stdin,"%d %d",&int_var1,&int_var_2);
请给我一个详细的解释。在fprintf()和fscanf()中使用stdin和stdout是什么?
答案 0 :(得分:1)
fscanf(file, ...)
从打开的文件file
中读取。
fscanf(stdin, ...)
从"标准输入中读取" (通常是你的键盘)。请注意,标准输入实际上并不是一个文件,但无论如何它都被视为一个文件。
答案 1 :(得分:0)
我想你问为什么scanf(....)
和fscanf(stdin,....)
存在,因为他们做同样的事情
答案是使用fxxxx版本允许我编写独立于文件的代码。即
void Foo(FILE * f)
{
fscanf(f,....);
fprintf(f,....)
....
}
现在我可以Foo(stdin)
,Foo(file)
显然那不是问题。所以这是实际问题的答案
fscanf(file,"%d %d",&int_var1,&int_var_2);
说 - 从FILE *指针file
fscanf(stdin,"%d %d",&int_var1,&int_var_2);
说 - 从FILE *指针stdin
您必须使用file
fopen
stdin
已存在(在stdio.h中定义)并连接到用户输入终端
答案 2 :(得分:0)
这样看......
全局变量stdin
,stdout
和stderr
都定义为
extern FILE *stdin, *stderr, *stdout;
它们是由shell打开的文件,用于启动程序,并在您输入main时始终存在。
fxxxx函数的语法糖版本(fscanf,fprintf等)缺少前导“f”(scanf,printf等)。这些只有一个默认的第一个参数(scanf使用stdin,printf使用stdout)。
scanf
可以写为fscanf
这里有一些非常粗糙的伪代码
int scanf(const char *format, ...)
{
... // VA args stuff
int result = fscanf(stdin, format, ...);
... // More VA args stuff
return result;
}
但您需要使用fprintf
打印到错误输出。