为题目造数据

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;
}
posted @ 2021-09-26 12:00  zhuangzhongxu  阅读(81)  评论(0)    收藏  举报