[英]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.