2017-01-08 25 views
1

我已經超負荷運營商>>,我想從文件中讀取數據,即從文件中讀取預期

Store first; 
std::wifstream in("file.txt"); 
in >> first; 

下面是代碼不起作用的類型wstring

surface_area_屬於double

file.txt的:

Euro AGD 
1154,5 
0 
0 

(我已成立波蘭$ LANG,這就是爲什麼有逗號,而不是一個點)

而我得到的是:

1 154,5 
4 519 717 136 

如果我在getline後添加is.ignore()我得到:

154,5 
0 

我的猜測是getline導致一個緩衝區混亂。如何使這項工作?

+0

鑑於您使用wifstream,您的文本文件存儲在unicode? getline消耗endline字符,所以它可能會混淆 –

+0

是的,文本文件存儲在unicode中。用±或者ć等波蘭字符朗讀單詞的效果很好。 – SantaXL

+1

難道是空間是您的區域設置中的「千位分隔符」嗎?很難相信,但它是這樣表現的......這可能解釋了第一個輸出,但不是第二個輸出。我認爲有些地方的設置與文件格式混亂了。 –

回答

1

好的,我想我找到了解決方案。整個問題是,在一個文件中有1154,5而不是1 154,5--並且在這個小改動(沒有任何ignore())後一切正常。有趣的是,11 541,5也可以正常工作,但111 541,5被四捨五入爲111 542(whyyyyyy)。

另一個有趣的問題是,爲什麼hack << store.surface_area_保存的數字格式不是>>正試圖讀取它。他們真的應該簡化C++編碼,這太麻煩了。編輯:它不,它畢竟是我的壞。

+0

好消息。但我永遠不會喜歡與千位分隔符一起工作。這將是一個真正的頭痛,祝你好運! –

+1

感謝您對千位分隔符的建議,我沒有注意到之前沒有空間。我們今天都學到了一些東西:)保重,夥計 – SantaXL