2012-03-30 10 views
7

que tienen este código:formato a la corriente de salida, ios :: izquierda y derecha ios ::

cout << std::setiosflags(std::ios::right); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 

cout << std::setiosflags(std::ios::left); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 

pero la salida no viene como esperaba. en lugar de:

1 2 
1 2 

esto sale:

1 2 
    1 2 

¿Cuál es el problema? Configuré 'std :: ios :: left' pero no hace diferencia?

Respuesta

7

Debe borrar el valor anterior en adjustfield antes de poder establecer uno nuevo.

Prueba esto:

#include <iostream> 
#include <iomanip> 
int main() { 
    std::cout << std::resetiosflags(std::ios::adjustfield); 
    std::cout << std::setiosflags(std::ios::right); 
    std::cout << std::setw(3) << 1 << std::setw(3) << 2 << '\n'; 

    std::cout << std::resetiosflags(std::ios::adjustfield); 
    std::cout << std::setiosflags(std::ios::left); 
    std::cout << std::setw(3) << 1 << std::setw(3) << 2 << '\n'; 
} 
15

menos que se sienta masoquista, sólo tiene que utilizar:

// right justify by default. 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; 

// left justify 
cout << std::left << setw(3) << 1 << setw(3) << 2 << '\n'; 

// right justify again. 
cout << std::right << setw(3) << 1 << setw(3) << 2 << '\n'; 
+1

+1. Tenga en cuenta que 'std :: right' también existe. –

+1

@ Robᵩ: Buen punto: agregado al código de muestra. –

1

Su código quiere un std::resetiosflags(std::ios::right) enviado a la corriente de salida para deshacer el std::setiosflags(std::ios::right) anterior.

1

Parece que si se configuran las banderas left y right, la que se estableció primero tiene prioridad. Si reinicio explícitamente right bandera antes de left, me sale el resultado que se esperaba:

cout << std::setiosflags(std::ios::right); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 

cout << resetiosflags(std::ios::right); 

cout << std::setiosflags(std::ios::left); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 
6

Uso setf con una máscara (sin necesidad de resetiosflags)

using namespace std; 
cout.setf(ios::right, ios::adjustfield); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 

cout.setf(ios::left, ios::adjustfield); 
cout << setw(3) << 1 << setw(3) << 2 << '\n'; // Output two values 
Cuestiones relacionadas