为题目造数据
c++读写数据特有的方式是
#include<fstream>
...
ifstream is("文件名1");//或者ifstream is("文件名1",ios::in,0);
ofstream os("文件名2");//或者ofstream os("文件名2",ios::out,0);
...
is>>x;
...
os<<y;
...
is.close();
os.close();
但这种方式太慢了,要用is读入文件中的数据,用os写出数据,操作繁杂
有这样一种方式,输入输出重定向,可以用printf向文件输出数据,用scanf向文件输入数据
必备头文件:
#include<cstdlib>//rand()函数
#include<ctime>//time(0)种子
#include<cstdio>//freopen()重定向
输入输出重定向:
FILE freopen(const char* filename, const char* mode, FILE* stream);
形参说明:
filename:需要重定向到的文件名或文件路径。
mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
stream:需要被重定向的文件流。
造数据的main函数:
int main(){
srand((int)time(NULL));
for(int t=1;t<=10;t++){
string s=to_string(t);//c++11特性,整型转字符串型
s+=".in";
char ch[10];
for(int i=0;i<s.size();i++) ch[i]=s[i];
ch[s.size()]='\0';
freopen(ch,"w",stdout);//这里的ch的位置规定必须是字符数组
f();//f()函数写要输出的东西
fclose(stdout);//这个最好写上,因为是要把缓冲区内剩下的东西送进文件
}
return 0;
}
//最后会y一次性在源代码的同级目录下生成1.in,2.in,3.in,...,10.in这几个文件
跑数据,得答案的main函数:
int main(){
int t=1;//得自己改t的值,用for循环的话跑不起来
//其它同上
string s1=to_string(t),s2=s1;
s1+=".in";
s2+=".out";
char ch1[10],ch2[10];
for(int i=0;i<s1.size();i++) ch1[i]=s1[i];
ch1[s1.size()]='\0';
for(int i=0;i<s2.size();i++) ch2[i]=s2[i];
ch2[s2.size()]='\0';
freopen(ch1,"r",stdin);
freopen(ch2,"w",stdout);
f();//可以暴力跑,这样比较稳;用算法也可以
fclose(stdin);
fclose(stdout);
return 0;
}

浙公网安备 33010602011771号