2011-09-14 10 views
6

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

4

L'opposto di std::fixed è std::scientific.

(a trovare una bella lista di manipolatori in this great answer.)

1

È possibile utilizzare resetiosflags() per annullare l'impostazione di eventuali flag.

+0

Esiste un "default" che posso impostare? – Moshe

+0

Credo che il valore predefinito sia 'std :: ios :: scientific'. – Chad

+0

@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

1

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:

  1. il manipolatore std::resetiosflags è possibile reimpostare flag specifici per le loro impostazioni predefinite;

  2. le due funzioni ios::flags consentono di salvare e ripristinare i valori precedenti dei contrassegni di formato.

+1

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. –