Quando si utilizza cout
, qual è il formattatore predefinito definito nell'intestazione <iomanip>
? In altre parole, una volta impostato il mio formattatore su fixed
utilizzando cout << fixed << setPrecision(2)
, come posso ripristinarlo? Oppure, cosa sto cambiando di nuovo a?Qual è l'opposto di `fixed` in cout?
risposta
L'opposto di std::fixed
è std::scientific
.
(a trovare una bella lista di manipolatori in this great answer.)
È possibile utilizzare resetiosflags()
per annullare l'impostazione di eventuali flag.
L'opposto di std::fixed
è std::scientific
. Questo potrebbe fare per te.
Tuttavia, se si desidera ripristinare più bandiere, o se è necessario lo stato precedente, invece di quello predefinito è possibile utilizzare le soluzioni migliori:
il manipolatore
std::resetiosflags
è possibile reimpostare flag specifici per le loro impostazioni predefinite;le due funzioni
ios::flags
consentono di salvare e ripristinare i valori precedenti dei contrassegni di formato.
uhm, nel senso di "tornare all'impostazione predefinita" l'opposto di 'std :: fixed' non è' std :: scientific'. è più simile a una modalità di commutazione automatica del formato. –
La risposta è std::defaultfloat
in C++ 11. Per raggiungere questo obiettivo in C++ 03 si può fare
cout.unsetf(std::ios_base::floatfield);
Vedi Really, what's the opposite of "fixed" I/O manipulator?
Esiste un "default" che posso impostare? – Moshe
Credo che il valore predefinito sia 'std :: ios :: scientific'. – Chad
@Moshe: Sfortunatamente, non esiste un modo semplice per reimpostare completamente uno stream. Persino il codice più elaborato che ho visto di fare (da James Kanze, oltre un decennio fa) manca di alcune proprietà esoteriche, come 'iword' e' pword'. (Naturalmente, James era pienamente consapevole delle limitazioni). Tuttavia, puoi andare molto lontano con ['std :: ios :: flags()'] (http://www.cplusplus.com/reference/iostream/ ios_base/bandiere /). – sbi