Visualizzazione del testo in colonna corretta
Domanda
Dopo aver ottenuto un utile risposta qui , ho imbatto in un altro problema: la visualizzazione di due o più stringhe nella colonna voglio che essere visualizzato in per un esempio del problema che ho, voglio che questa uscita:.
Come here! where? not here!
ma invece ottenere
Come here! where? not here!
quando uso il codice
cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;
Ho fatto in modo (credo) che la larghezza di entrambe le colonne potrebbe contengono le due stringhe, ma non importa quanto grande ho impostato la larghezza delle colonne di essere, l'errore è ancora lì.
Soluzione
Come detto, setw()
vale solo per la prossima di ingresso, e si sta tentando di applicarla ai due ingressi.
Un'alternativa agli altri suggerimenti che ti dà la possibilità di utilizzare le variabili al posto di costanti letterali:
#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;
}
Altri suggerimenti
Si dovrebbe stampare il contenuto di ogni colonna come una singola stringa, invece di stringhe multiple consecutive, perché setw()
formatta solo la stringa successiva da stampare. Così si dovrebbe concatenare le stringhe prima della stampa, utilizzando per esempio string::append()
o +
:
cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;
setw
copre solo la stringa successiva, quindi avrai bisogno di concatenare loro.
cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;