簡體   English   中英

如何打開文件並將數據存儲到鏈表結構中

[英]How to open a file and store data into a linked list structure

我有一個函數buildList ,我應該在其中打開一個名為“studentFile1.txt”的給定文件,並使用重載運算符從文件中讀取數據。 我應該將所有數據保存為一個鏈接列表,其中每個學生的信息都是一個節點。 但由於某種原因,我似乎無法打開該文件。 這是函數buildList

{
    ifstream file;
    file.open("studentFile1.txt");

    Student temp;     // temporary struct Student object

    if (!file)
        cout << "Can not open file\n";
    while (file >> temp)
    {
        if (list.insert(temp) == false)
            cout << "Insert did not work\n";
    }
}

這是重載的運算符 >> 函數

istream &operator>>(istream &istr, Student &obj)
{
    ifstream file;
    file.open("staudentFile1.txt");

    if (!file)
        cout << "Can not open file.\n";
    while (file)
    {
        istr >> obj.id;
        istr.ignore();
        istr.getline(obj.name, 50, '\n');
        istr >> obj.gpa;
        istr >> obj.major;
    }

    return istr;
}

當我調用buildList函數時,它只說“無法打開文件”兩次。 我究竟做錯了什么?

當您編寫 file.open("studentfile1.txt") 時,可執行文件假定該文件與可執行文件位於同一目錄中。 檢查它們是否是。 至於您已經在運算符重載之外打開文件的其余代碼,您不應該再這樣做。 還要刪除 while 循環,因為它會一直讀取到文件末尾,因此您將讀取一條記錄,而所有其他記錄都是空的。

 istream &operator>>(istream &istr, Student &obj)
    {
            istr >> obj.id;
            istr.ignore();
            istr.getline(obj.name, 50, '\n');
            istr >> obj.gpa;
            istr >> obj.major;
    
        return istr;
    }
int main(){
   Student s;
   ifstream file;
   file.open("staudentFile1.txt");
    
   if (!file)
            cout << "Can not open file.\n";
   else {
       while(file>>s)list.insert(s);
   }
   
}

暫無
暫無

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

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