2013-06-19 60 views
7

在我目前正在研究的項目中,我鏈接到專有的動態庫。只要我運行庫的initialize函數,記錄和打印數字的行爲就會改變。在cout中禁用逗號?

逗號已插入每隔三位小數。 IE瀏覽器。

cout << 123456789 << endl 

用於打印出123456789,現在它打印123,456,789。這太可怕了,因爲這種行爲不是我想要的。

經過一番研究,我懷疑是一個語言環境問題。我一直在使用這行代碼調用initialize功能

setlocale(LC_ALL,"C"); 

認爲它可能會重置我的地方到默認後嘗試;但無濟於事。逗號持續!

我錯過了什麼?

我在問題here上發佈了相關跟隨。

回答

5

您可以設置流的語言環境,而不受使用setlocale設置的語言環境的影響。試試std::cout.imbue(std::locale("C"));

+0

這對我的主要局部變量非常有用!但是,我運行的可執行文件也鏈接到10多個自定義共享庫。不幸的是,逗號錯誤傳播到共享庫'stringstreams'和'couts'中。有沒有更好的方法來全局設置本地,而不是遍歷我的庫的所有源代碼,併爲每個我找到的串流添加'imbue(std :: locale(「C」))''? – dinkelk

+0

我編輯的問題更具體。 – dinkelk

2

如果你只是想擺脫逗號,你也可以替換當前的std::numpunct,這可能導致它與默認的不會覆蓋do_grouping

std::cout.imbue(std::locale(std::cout.getloc(), new std::numpunct<char>())); 
+0

@ Jesse Good,謝謝你的建議。這適用於我的一些情況。看到我上面的編輯。 – dinkelk

+0

@dinkelk你應該只對每個帖子提出一個問題。我建議你創建一個新的問題來解決這個問題。 :) – 0x499602D2

+0

@ 0x499602D2這裏的答案還沒有完全解決我的問題。問題沒有改變,只是具體情況。 – dinkelk