C++中將打印結果輸出到文件中

    本人最近在藍橋杯調試的過程中痛感到打印結果在調試界面上,腦海裏是有點不情願的。於是想出了將輸出結果重定向到指定的文件上面。

直接上代碼:

#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();關閉文件流;


發佈了44 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章