|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
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 ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Scusate se uppo,mi serve davvero.
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' questo per caso ?
std::locale::global(const locale& x); Se è questo mi faresti un esempio di utilizzo di queste cose ? |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
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 ![]() ![]() ![]() 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 ![]() PS Ti pare che uno debba spendere 800 euro per un programma fatto in questo modo? ![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Concordo ed è persino molto utile
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
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 ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Bene è molto interessante...
la vecchia libreria C aveva setlocale...magari quella puoi aiutarti a settare il locale di default anche per gli stream... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:52.