繁体   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