关于 freopen
  • 板块学术版
  • 楼主zhangbo1000
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/4/4 16:03
  • 上次更新2024/4/4 18:25:01
查看原帖
关于 freopen
760291
zhangbo1000楼主2024/4/4 16:03

参考下面的代码:

#include<iostream>
#include<cstdio>
#include<random>
using namespace std;
#define N 1000000
int main(){
	freopen("1.in","w",stdout);
	mt19937 rng(time(0)*time(0)*time(0));
	for(int i=0;i<N;i++){
		cout<<(unsigned int)(rng()%10)<<' ';
	}
	return 0;
}

它本来应该在 1.in 中输出 10000001000000 个个位数,用空格隔开,但实际上输出的是像这样的乱码,而且两个之间没有空格:

‰‹‴‶‸‶‰‹‴‶‷′′‹‶‱‰‵‵″‹′‴‶‱‸‸‸‰″‰‸‸‱‵‶‰‷‴‶‹‰‹′‵‱‵″‸‴‵‱‵‹‰″″‰‱′‷′‷″‶‶‵‹″′‸″′‸‸‶‷‷‵′‷‴‱‵‴‷‷‰″′‶″‰‹‷″‹‷‹‷‴‴‷‷‱‶‶″‸″″‰‱‵‶‱‴′‶‴″″‵

把 freopen 那一行注释掉,使程序通过标准输出输出,此时其输出内容并没有任何问题,请问这是什么问题。

测试时尝试了 printf 和 cout 两种输出方法,开不开 O2 都试了一遍,运行和编译环境都是 windows,IDE 用 Dev C++ 和 Red Panda C++ 各试了一遍,语言标准是 ISO C++ 14。

2024/4/4 16:03
加载中...