View Full Version : C++: Settare il locale globale una volta per tutte
per uno stream lo so fare:
...
cout.imbue(std::locale(""));
...
Così si puo usare la virgola come sep decimale...
ma vorrei sapere come si setta la proprietà global (one-shoot) .
perchè non capisco la sintassi da adoperare.
Esempiuccio please :)
Scusate se uppo,mi serve davvero. :)
E' questo per caso ?
std::locale::global(const locale& x);
Se è questo mi faresti un esempio di utilizzo di queste cose ?
Originally posted by "cionci"
E' questo per caso ?
std::locale::global(const locale& x);
Se è questo mi faresti un esempio di utilizzo di queste cose ?
Si,il metodo è quello:
non capivo come fare la chiamata che a questo punto dovrebbe (correggimi se sbaglio) essere questa
std::locale::global(std::locale(""));
Il più importante è quello che ti consente di leggere nella locale nativo un input stream (sopratutto ifstream e stringstream).
Esempio: leggere un double da file in italiano considerando la virgola come separatore decimale e il punto come separatore di migliaia.
Sembra che molti programmatori italiani abbiano l'inclinazione ad usare il punto anche quando l'applicazione è specificamente rivolta ad italiani.
Cosicchè se come è normale, tu hai in windows\impostazioni internazionali la virgola,il programma si rincogl****sce come minimo.
Oppure come fa un programma ingegneristico (800 euro) che conosco
che ti avverte di cambiare le impostazioni internazionali se no non si avvia il programma :rolleyes: :mad: (perchè il fesso ha comprato un componente che fa schifo ;) )
invece il metodo di cui parliamo prende automaticamente l'impostazione dalla variabile globale (separatore) e le altre ,in base a cosa hai settato nel SO.
Ora normalmente lo iostream viene inizializzato con il locale standard "C"
che usa il punto.Il mio intento è settare il locale nativo all'inizio del programma. ;)
Spero cionci di essere stato chiaro :)
provo a vedere se la chiamata funziona :D
PS Ti pare che uno debba spendere 800 euro per un programma fatto in questo modo? :muro:
Concordo ed è persino molto utile ;)
Piccolo inconveniente:
se setti solamente il locale globale e poi usi normalmente uno stream:crasha.
Questo è dovuto al fatto che allo startup gli stream vengono inizializzati con il default locale "C" (Inglese Americano ASCI);quindi comunque
bisogna risettarli al locale scelto con
cout.imbue(std::locale("")); (setta il locale del SO)
oppure se vuoi l'italiano:
cout.imbue(std::locale("Italian_Italy.850"));
molto utile a runtime la proprietà name per settare ad esempio
al volo una stringa messaggio nella lingua scelta. :)
Mi sembra sia tutto.
Grazie Cionci per essere stato a sentirmi ed avermi aiutato ;)
Bene è molto interessante...
la vecchia libreria C aveva setlocale...magari quella puoi aiutarti a settare il locale di default anche per gli stream...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.