2013-06-19 67 views
7

W projekcie, nad którym obecnie pracuję, łączę się z zastrzeżoną biblioteką dynamiczną. Po uruchomieniu funkcji bibliotecznej initialize zmienia się zachowanie rejestrowania i drukowania numerów.Czy chcesz wyłączyć przecinki w cout?

Przecinki zostały wstawione co trzy miejsca po przecinku. To znaczy.

cout << 123456789 << endl 

służy do wydrukowania 123456789 i teraz drukuje 123,456,789. To jest okropnie denerwujące, ponieważ takie zachowanie nie jest tym, czego chcę.

Po pewnych badaniach podejrzewam, że problem z lokalizacją. Próbowałem za pomocą tego wiersza kodu po wywołaniu initialize funkcję

setlocale(LC_ALL,"C"); 

myślenia może zresetować mojego lokalnego do domyślnego; ale bez skutku. Przecinki pozostają!

Czego mi brakuje?

Opublikowałem pokrewną obserwację na pytanie here.

Odpowiedz

5

Można ustawić lokalizację dla strumienia, niezależnie od ustawień regionalnych ustawionych za pomocą setlocale. Wypróbuj std::cout.imbue(std::locale("C"));

+0

który działał świetnie w przypadku zmiennych lokalnych w mojej wersji głównej! Jednak uruchamiany plik wykonywalny jest również powiązany z ponad 10 niestandardowymi bibliotekami współdzielonymi. Błąd przecinania rozprzestrzenia się niestety również w bibliotekach współdzielonych "stringstreams" i "couts". Czy istnieje lepszy sposób globalnego ustawienia lokalnego, zamiast przechodzenia przez cały kod źródłowy dla moich bibliotek i dodawania do 'imbue (std :: locale (" C "))' dla każdego strumienia struny jaki znajduję? – dinkelk

+0

Edytowałem pytanie, aby było bardziej szczegółowe. – dinkelk

2

Jeśli chcesz po prostu pozbyć się przecinków, możesz również zastąpić bieżący numer std::numpunct, który prawdopodobnie powoduje go z domyślnym, który nie zastępuje do_grouping.

+0

@ Jesse Good, dzięki za sugestię. Działa to dobrze w niektórych moich przypadkach. Zobacz moją edycję powyżej. – dinkelk

+0

@dinkelk Powinieneś zadać tylko jedno pytanie na jeden post. Proponuję utworzyć nowe pytanie dotyczące problemu. :) – 0x499602D2

+0

@ 0x499602D2 Odpowiedzi nie naprawiły w pełni mojego problemu. Pytanie się nie zmieniło, tylko szczegóły. – dinkelk