我正在使用類構建一個簡單的家族樹,其中每個人都有一個ID並且可以有一個或多個關係,並且每個關係也都有一個ID。我試圖導入此文件,以便能夠使用類的方法導入樹:從C/C++中使用不同變量類型的文本文件讀取數據
9
Charless
0
F
2 5
Dianaaaa
0
M
1
William
1
M
6
Harry
1
M
-1
...
對於某些情況下,文本文件顯示人在樹,名字,兒子數關係號碼X,性別和這個人與之有關係的人的ID。如果該人沒有任何關係,則顯示「-1」。當我通過類方法添加人員或關係時,我會自動增加ID。要導入文件,我正在做這樣的事情:
ifstream f2;
f2.open("databasev2.txt");
string name; char gender;
int personrelationshipid; int sonofrelationshipid;
int numberOfPeople;
vector<int>relationships;
f2 >> numberOfPeople;
if (f2.is_open())
{
while (f2 >> name >> sonofrelationshipid >> gender)
{
while (f2 >> personrelationshipid)
{
relationships.push_back(personrelationshipid);
f2.ignore(0, ' ');
}
//...do something with the variables
我目前的問題是循環停止後的第一次迭代。我不確定是否考慮到第二個名字「Dianaaa」不再是一個字符串......現在,它正在讀「9」,「Charless」,「0」,「F」,「2」和「 5「,並將它們插入到矢量中,然後停止。如果我只有一個關係,這不會發生(即如果我刪除了5)
此外,我想添加名稱之間有空格 - 要做到這一點,我想我只需要創建一個字符串並使用f2.getline(name,string),然後清除緩衝區並刪除換行符,這樣我就沒有麻煩閱讀下一行了,對嗎?
我無法使用boost/JSON來序列化信息 - 我必須手動執行此操作,因此我非常感謝「重新發明輪子」中的一些幫助。但是,我可以根據需要編輯該文件,並添加一些分隔符。
在此先感謝
使用正確的工具來解決這些問題是你的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
我確實使用了調試器 - 這就是我發現它正確讀取第一行然後退出程序 –
我想,第二個while循環是你的問題。 你能減少你的文件到2塊和1的關係嗎? 也試試f2 >> personrelationshipid;沒有while循環? – demonking