您的位置:首页 > 编程语言 > C语言/C++

C++中将打印结果输出到文件中

2015-04-03 20:41 831 查看
本人最近在蓝桥杯调试的过程中痛感到打印结果在调试界面上,脑海里是有点不情愿的。于是想出了将输出结果重定向到指定的文件上面。

直接上代码:

#include<iostream>
#include<cmath>
#include<fstream>
using namespace std;
static int mcount = 0;
int x[100];
bool place(int k){//判断放置的位置是否与前面放置的皇后的位置放生冲突
for(int i = 1;i < k;i ++)
if(x[k] == x[i] //表示前 k个皇后摆放的位置是否与要摆放的第 k个发生冲突
|| abs(k - i) == abs(x[k] - x[i]))//若要摆放的第 k个皇后与前 k个做成对角关系
return false;
return true;//若上述都没发生则表示可以摆放在该位置
}

void quene(int n) {
ofstream Save("huang.txt");
for(int i = 1;i <= n;i ++)
x[i] = 0;
int k = 1;
while(k >= 1){
x[k] = x[k] + 1;//在下一行摆放
while(x[k] <= n && !place(k))
x[k] =x[k] + 1;//搜索下一行
if(x[k] <= n && k == n){//当遍历完所有的皇后后则打印输出每个皇后的位置
mcount ++;
for(int i = 1;i <= n;i ++){
Save << x[i];
if(i < n)
Save <<" ";
}
Save <<endl;
}
else if(x[k] <= n && k < n)
k = k + 1;//开始放置下一个皇后
else{
x[k] = 0;//重置第 k个皇后的位置 回溯到重新开始找第 k - 1个皇后的位置
k = k - 1;
}
}
Save.close();
}

int main(){
int n;//表示输入的皇后数
while(cin >> n){
quene(n);
cout<<mcount<<endl;
mcount = 0;
}
return 0;
}


其中,第一步:包含头文件#include<fstream>;

第二步:定义ofstream,即"output file stream(输出文件流)"。这样,它将建立一个句柄(handle),以便我们能以一个文件流的形式写入文件。故在这里,Save就是文件句柄,可以用其他名称代替;

第三步:定义("huang.txt");打开为huang.txt的文件。若存在,则被替换掉;若不存在,则程序自动为你创建一个新的文件。

需要注意的是:

(1)ofstream是一个类。因此,ofstream Save("huang.txt");是为了创建一个ofstream类的对象;而此括号中所传递的参数将会上传给构造函数。这里我们将建立文件的名称作为实参传给了该类ofstream的构造函数。其中,也会括号里也可以传递其他的参数,这里不加叙述。

(2)我们的输出不是用cout将其输出到屏幕上,而是用句柄来操作。其实这是重载了"<<"运算符而实现的重定向。Save << x[i];就是讲数组的值写入文件,而这个文件句柄它关联一个打开的流式文件。所以只需输入句柄名,接着输入"<<",然后写上你想输出的内容,如字符串、数组或其他字符等就可以实现对文件的写入。

(3)最后将全部数据写入完之后就需要关闭这个文件,即Save.close(),刚才也说了Save其实就是个对象。故此时就是调用这个ofstream类里的成员函数即可关闭;

(4)一旦你关闭文件之后,在重新打开它之前,就再不能对它进行访问。这需要重新声明句柄才行。

而读取一个文件与写入到一个文件相似:

第一步:包含头文件#include<fstream>;

第二步:定义ifstream,即"input file stream(输入文件流)"。这样,它将建立一个句柄(handle),以便我们能以一个文件流的形式打开文件。故在这里,Open就是文件句柄,可以用其他名称代替;

第三步:定义("huang.txt");打开为huang.txt的文件;

第四步:通过Open.get(ch)来从相应的流文件中读出一个字符,并将其返回给变量。在这句话中get( )函数只带一个参数——用于存储所读取的字符的变量。所以,调用Open.get(ch)后程序将会从Open流中读取一个字符并存入变量ch中。

第五步:Open.close();关闭文件流;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: