簡體   English   中英

在C ++中讀取文件錯誤

[英]Reading file in C++ error

我在讀取文本文件以字符串結構時遇到問題。 它只是停止工作,無法執行任何操作。

結構體:

struct Ksiazka
{
        string autor;
        string tytul;
        int data;
};
struct Ksiazka * d = new Ksiazka[10];
int il;


ofstream zapis("biblio.txt", ios::app);
                    for(int i = 0; i < il; i++)
                    {
                        zapis << d[i].autor << " ";
                        zapis << d[i].tytul << " ";
                        zapis << d[i].data;
                        if(i<il-1) zapis << " \n";
                    }
                    zapis.close();       
ifstream odczyt;
                odczyt.open("biblio.txt");
                odczyt.seekg(0);
                il = 0;
                while(!odczyt.eof())
                {
                    odczyt >> d[il].autor;
                    odczyt >> d[il].tytul;
                    odczyt >> d[il].data;
                    il++;
                }
                odczyt.close();

使用getline(odczyt,line); 並檢查此cout <<行<< endl; 在將其加載到您的結構之前給出

您很可能被STL I / O流所困擾,這是我的寵兒之一:它們不安全。

如果您的作者或標題字符串包含空格(並且最像它們一樣),那么當您閱讀這些行時,<<操作符會在空格(空格,制表符,換行符)上分割參數; 因此您的代碼將簡單地讀取前兩個單詞 (而不是字符串) ,然后嘗試讀取整數。 想象一下這在您的數據庫中:

George Orwell 1984 1949

然后,在閱讀您的作者字段之后,將包含“喬治”,標題“奧威爾”和年份“ 1984”。 下次閱讀時將在作者字段中輸入“ 1949”。

不幸的是,使用STL沒有簡單的方法來使<<和>>運算符保持字符串完整(特別是如果字符串本身包含換行符)。 您可能會考慮使用base64編碼/解碼或urlencode / urldecode。

最后一句話:不要使用文字"\\n"來終止行,而應使用std :: endl。

暫無
暫無

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

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