寫在開頭
由于我使用的是Qt Creator檀蹋,所以構(gòu)建目錄默認不在工程目錄中赌厅,在進行與文件有關(guān)的操作時,要把文件放在構(gòu)建目錄下带斑,也就是build-XXX-Desktop_Qt_5_12_0_MinGW_64_bit-Debug這個文件夾下面阱州。
-
打開以及關(guān)閉文件
在程序進行有關(guān)文件的操作時挑秉,要添加頭文件:
#include <fstream>
在打開文件以將文件的數(shù)據(jù)讀入時,要先創(chuàng)建一個ifstream類的對象苔货,并且判斷文件是否打開成功衷模,這是進行后續(xù)操作的基礎(chǔ):
ifstream fin;
fin.open("data.txt");
if(fin.is_open() == false)
{
cout << "Can't open the file successfully! Bye!" << endl;
exit(EXIT_FAILURE);
}
在文件操作結(jié)束時,要關(guān)閉文件:
fin.close();
-
從文件讀入數(shù)據(jù)
在旅行模擬查詢系統(tǒng)中蒲赂,我們需要把路線存儲在文件中阱冶,我們的任務(wù)是從文件中將這些數(shù)據(jù)抽象出來,存入到數(shù)據(jù)結(jié)構(gòu)中去滥嘴,所以從文件中讀入數(shù)據(jù)是一項必要的操作木蹬,下面學習一下文件的基本操作。
現(xiàn)在我暫時把數(shù)據(jù)的存放方式確定為:交通方式(int,1表示普通火車镊叁,2表示高鐵尘颓,3表示飛機) 空格 車次(航班)號(string) 空格 起始城市代號(int) 空格 出發(fā)時間(int,采用24小時制晦譬,如17:30就寫成1730,7:55就寫成755) 空格 到達城市代號(int) 空格 到達時間(int疤苹,格式與上述相同,但是如果與出發(fā)時間相比跨過了一天的話敛腌,加上權(quán)重24卧土,比如到達時間是第二天的凌晨5:00,就寫成2900)空格 價格(int像樊,遇到小數(shù)四舍五入) 回車
例如:
2 G71 1 727 2 1305 521
2 G71 2 1308 3 1713 464
......
我們的任務(wù)就是把文件中的數(shù)據(jù)存到數(shù)據(jù)結(jié)構(gòu)中去尤莺,我選擇使用對象數(shù)組存儲。
class LineInfo
{
public:
int TransportTool; //交通工具類型生棍,1為普通火車颤霎,2為高鐵/動車,3為飛機
string TransportNum; //車次或航班號涂滴,如 G51
int DeparturePoint; //出發(fā)城市編號
int DepartureTime; //24小時制出發(fā)時間友酱,如7:00就寫為700
int ArrivalPoint; //到達城市編號
int ArrivalTime; //24小時制到達時間,如果隔天到達柔纵,加上權(quán)重24缔杉,比如3:00寫成2700
int TicketPrice; //票價
LineInfo *NextLineInfo; //指向下一條邊
LineInfo();
LineInfo(const LineInfo &);
LineInfo(const int &,const string &,const int &,const int &,const int &,const int &,const int &);
};
其實好像直接存入到結(jié)構(gòu)體數(shù)組中就可以,不過為了避免以后要添加函數(shù)等操作首量,就先定義一個類吧壮吩。
有一個判斷到達文件末尾的成員函數(shù)eof()进苍,可以用于判斷是否達到輸入末尾:
while(!fin.eof()){......}
讀入數(shù)據(jù)的話加缘,可以直接使用文件流的">>"重載讀取數(shù)據(jù):
fin >> temp[i].TransportTool >> temp[i].TransportNum >> temp[i].DeparturePoint >> ......;
我覺得目前利用這些知識就能實現(xiàn)文件的讀入了,如果有需要的話會繼續(xù)添加的觉啊。