2008-11-09 13 views
26

estoy bastante seguro de que esto es una cuestión sencilla en cuanto a formato, pero esto es lo que quiero lograr:cout Formateo

Quiero datos de salida en la pantalla usando cout. Quiero imprimir esto en forma de un formato de tabla. Lo que quiero decir con esto es que las columnas y las filas deben alinearse correctamente. Ejemplo:

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

Soy sólo se ocupa de la línea individual para mi línea de salida ahora (no funciona) se

cout < < var1 < < "\ t \ t" < < var2 < < endl ;

Lo que me da algo así como:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

Respuesta

44

setw.

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    cout << setw(21) << left << "Test" << 1 << endl; 
    cout << setw(21) << left << "Test2" << 2 << endl; 
    cout << setw(21) << left << "Iamlongverylongblah"  << 2 << endl; 
    cout << setw(21) << left << "Etc"  << 1 << endl; 
    return 0; 
} 
+0

no me da lo que quiero .. ¿está seguro de que esto es correcto? – BobS

+0

Olvidó agregar "<< izquierda". Esto es obligatorio si desea campos fijos alineados a la izquierda. –

+1

std :: left no se restablece en cada salida formateada, solo la necesita una vez. (El ancho del flujo * es * restablecido). –

11

Aconsejo utilizar Boost Format. Use algo como esto:

cout << format("%|1$30| %2%") % var1 % var2; 
2

Debe encontrar la longitud de la cadena más larga en la primera columna. Luego necesita dar salida a cada cadena en la primera columna en un campo cuya longitud es la de esa cadena más larga. Esto necesariamente significa que no puede escribir nada hasta que haya leído todas y cada una de las cadenas.

+0

¿No hay una manera más fácil? Usando setw o algo. – BobS

+1

> ¿No hay una manera más fácil? No a menos que pueda predecir el futuro. > Usando el sistema o algo así. Sí, setw es una forma de "dar salida a cada cadena en la primera columna de un campo cuya longitud es la de esa cadena más larga". –

+1

La salida más formateada que he visto no se molesta en encontrar el tamaño máximo de un campo y si se sobrepasa un valor decente, bueno, pero el formato se ve un poco raro cuando lo hace. –

-2

puede hacerlo con

string str = "somthing"; 
printf ("%10s",str); 
printf ("%10s\n",str); 
printf ("%10s",str); 
printf ("%10s\n",str);