基本思路:
正常的是 dev 编译运行,出现控制台,手动输入,然后显示输出
现在通过 freopen 函数实现输入输出的重定向
- 确定文件夹位置,生成文件夹名字,确定几组数据
- 随机生成数据,通过 freopen 的 w 操作,写入文件(1.in、2.in…)
- 写标称
- 生成数据,通过 freopen 的 r 和 w 操作,从文件(1.in、2.in…)中读取输入,生成的输出数据写入文件(1.out、2.out…)
整体框架:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
typedef long long ll;
const int st = 1, en = 10; //数据的组数 en-st+1 一般为10组
string load_path, out_path, fin = ".in", fout = ".out"; // load_path 导入导出的路径, fin输入文件, fout输出文件
// 题号字符串化
void deNumber(int n)
{
string ad , paths = "D:/test/sister/"; //存入的路径(自己设置):D盘test的子文件夹sister
load_path.clear(); //字符串清空
out_path.clear();
if(n<10)
ad += char(n + '0');
else
{
ad += char(n / 10 + '0');
ad += char(n % 10 + '0');
}
load_path = paths + ad + fin; // 路径 + 编号 + .in(.out)
out_path = paths + ad + fout;
}
void DECODING(int inc)
{
/*写数据*/
}
/*需要的函数*/
void ANSWER()
{
/*主函数里面的程序*/
}
int main()
{
srand(time(NULL)); //初始化
bool gdata = false; // 出数据/出答案 true/false
for(int i = st; i <= en; i++)
{
deNumber(i); //处理编号
if(gdata)
{
freopen(load_path.c_str(), "w", stdout); //将 const string* 类型 转化为 const char* 类型,指向字符串的首地址
DECODING(i); // 数据生成并直接写入
cout.clear();
}
else
{
freopen(load_path.c_str(), "r", stdin); // 读入文件 c语言文件的重定向
freopen(out_path.c_str(), "w", stdout); // 写入文件
ANSWER(); // 答案生成
cin.clear();
}
}
return 0;
}