Visualización de texto en la columna correcta
Pregunta
Después de conseguir una respuesta útil aquí , tengo encuentro con otro problema: se presentan dos o más cadenas en la columna quiero que se muestre en para un ejemplo del problema que tengo, quiero esta salida:.
Come here! where? not here!
, pero en lugar de obtener
Come here! where? not here!
cuando se utiliza el código
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
Me aseguré (creo) que el ancho de las dos columnas podría contener las dos cadenas, pero no importa lo grande que puedo configurar el ancho de las columnas sea, el error sigue ahí.
Solución
Como se ha dicho, setw()
sólo se aplica a la entrada siguiente, y que está tratando de aplicarlo a dos entradas.
Una alternativa a las otras sugerencias que le da la oportunidad de utilizar variables en lugar de constantes literales:
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
stringstream ss;
ss << "Come here!" << " where?";
cout << left << setw(30) << ss.str() << setw(20) << "not here!" << endl;
return 0;
}
Otros consejos
Usted debe imprimir el contenido de cada columna como una sola cadena, en lugar de múltiples cadenas consecutivas, debido setw()
sólo se da formato a la siguiente cadena a imprimir. Por lo que debe concatenar las cadenas antes de imprimir, por ejemplo, usando string::append()
o +
:
cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
setw
sólo cubre la siguiente cadena, por lo que necesita para concatenar ellos.
cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;