0

我在读取文本文件以使用字符串进行结构时遇到问题。它只是停止工作,什么也做不了。

结构:

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();
4

2 回答 2

0

使用 getline (odczyt,line); 并检查这个 cout << line << endl; 在将其加载到您的结构之前给出

于 2013-06-10T11:43:40.673 回答
0

很可能你被我的一个对 STL i/o 流的讨厌所咬了:它们不是类型安全的。

如果您的作者或标题字符串包含空格(并且最像他们那样),当您阅读这些行时,<< 运算符将参数拆分为空格(空格、制表符、换行符);因此您的代码将简单地读取前两个单词,而不是字符串,然后尝试读取整数。想象一下这是在您的数据库中:

George Orwell 1984 1949

然后在阅读您的作者字段后将包含“George”、标题“Orwell”和年份“1984”。下一次阅读将在作者字段中输入“1949”...

不幸的是,对于 STL,没有简单的方法可以使用 << 和 >> 运算符来保持字符串完整(尤其是在字符串本身包含换行符的情况下)。您可以考虑使用 base64 编码/解码,或 urlencode/urldecode。

最后一点:不要使用文字"\n" 来终止一行,使用 std::endl。

于 2013-06-10T13:01:43.757 回答