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