簡體   English   中英

C ++:從txt文件讀取和寫入的成員函數

[英]C++: Member functions that read and write from txt file

對於這個問題提出的要求我很抱歉,我真的很努力。 我正在用私有成員x和y和成員函數getX,getY,setX,setY,讀取和寫入在C ++中編寫一個名為Point的類。 我已經能夠完成除讀取和寫入之外的所有操作,因為我對輸入/輸出文件感到厭煩。 我有以下讀取和寫入聲明:

void read(istream& ins);
void write(ostream& outs);

RME如下所示:

* Requires: ins is in good state.
* Modifies: ins, x, y.
* Effects:  Reads point in form (x,y)

並寫:

* Requires: outs is in good state.
* Modifies: outs.
* Effects:  Writes point in form (x,y).

“讀取”從給定的文件“ data1.txt”中獲取有序的點,例如(1、5),(2、7)等,並提取x和y分量(至少,我相信這是應該做的) 。 我提供了一個測試套件供閱讀:

void test_point() {
Point pt1;

pt1.setX(15);

cout << "pt1 is: " << pt1 << endl;

ifstream input_file;
input_file.open("data1.txt");
pt1.read(input_file);
cout << "pt1 is: " << pt1 << endl;

return;}

我真的不知道如何編寫讀取功能。 我試過定義字符a,b,c和整數u,v,然后執行:

ins >> a >> u >> b >> v >> c;

但這沒用。 有人可以幫我看看如何實現嗎?

您的問題中遺漏了很多東西,您需要確保使用此類可行。 例如,讀取有序點文件不應作為成員函數實現。 如果有的話,可以這樣使用循環:

    while(input_file) {
        // set a point to have members x, y that were read from file
        // store this point in a vector of points
    }

否則,沒有合理的方法來存儲您從文件中讀取的一堆點。

您在read函數中對該解決方案的想法肯定可以工作(假設字符a,b,c和int u,v):

    input_stream >> a >> u >> b >> v >> c;

實際上,使用您給我們的格式(以ifstream作為參數),在read函數中確實不需要很多其他操作,因為它可以改變對象並且不需要返回任何內容。 您的實現是解析結構化文件中此類“記錄”的最簡單方法。

閱讀完所有這些內容后,將調用者對象的x坐標設置為u,將y設置為v。這應該是一個void函數,不需要返回任何內容,但應該更改要調用的Point對象。 應該在我提到的循環中的一個臨時點對象上調用此成員函數,然后將該對象添加到點向量中,如下所示:

    vector<Point> points;
    while(...) {
        // declare Point
        // initialize with values from read
        points.push_back(//the point you just created);
    }

實際上,如果您需要能夠讀取多個點。

總之,您的讀取功能需要:

  1. 首先要檢查ifstream實際上是否很好,我還沒有提到(但這是您的要求之一):

     if (!input_file) { //however you want to handle this error } 
  2. 要讀入的臨時char和int變量(用作緩沖區)(順便說一句,您甚至可以直接讀入x和y,而不是讀入u和v然后進行復制,只是說)。

  3. 如果選擇不直接讀入x和y,則必須將u和v值分配給x和y。 現在您的對象已完成。

至於寫函數,將使用作為參數傳遞給寫函數的ofstream的名稱,而不是std :: cout,並以顯示的格式寫記錄。 從本質上講,這與打印到控制台沒有什么不同,除了輸出在文本文件上。

注意:請確保您了解iostream對象(istream,ostream)和fstream(ifstream,ofstream,fstream)對象之間的區別,在這種情況下,這是更可取的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM