freopen影响scanf输入,怎么回事?

一段测试代码,用来测试   freopen("out.txt", "w", stdin);   对输入的影响

#include <bits/stdc++.h>
using namespace std;

int main()
{
	    
//	freopen("in.txt", "r", stdin);

    freopen("out.txt", "w", stdin);

	int a=-100;
	scanf("%d",&a);
	printf("%d",a);
}

调试图:

a初始化为-100,此时控制台无法输入,可直接“下一步”

a的值一直为初始值-100

可一旦注释掉freopen("out.txt", "w", stdin);

整个程序就正常了(cin输入也有这个问题)

还发现freopen("in.txt", "r", stdin);并不会影响scanf输入,程序正常。

困扰了我好久,无意间注释掉这行才发现。

 

小白求救各位大神原因

很简单啊,因为freopen是调用文件,所以使用文件里的数据进行输入,cin则是调用的文件里的数据,所以不用自己输入。

我的文件里有数据,并且a的值一直为初始值-100

啥意思

是有啥问题

你要拿freopen() 这个函数来干什么?  具体要达到什么目的? 请说清楚。 

另外要仔细读文档: freopen, _wfreopen | Microsoft Docs