参考下面的代码:
#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 中输出 1000000 个个位数,用空格隔开,但实际上输出的是像这样的乱码,而且两个之间没有空格:
‰‹‴‶‸‶‰‹‴‶‷′′‹‶‱‰‵‵″‹′‴‶‱‸‸‸‰″‰‸‸‱‵‶‰‷‴‶‹‰‹′‵‱‵″‸‴‵‱‵‹‰″″‰‱′‷′‷″‶‶‵‹″′‸″′‸‸‶‷‷‵′‷‴‱‵‴‷‷‰″′‶″‰‹‷″‹‷‹‷‴‴‷‷‱‶‶″‸″″‰‱‵‶‱‴′‶‴″″‵
把 freopen 那一行注释掉,使程序通过标准输出输出,此时其输出内容并没有任何问题,请问这是什么问题。
测试时尝试了 printf 和 cout 两种输出方法,开不开 O2 都试了一遍,运行和编译环境都是 windows,IDE 用 Dev C++ 和 Red Panda C++ 各试了一遍,语言标准是 ISO C++ 14。