Justificar correctamente la salida en C++
-
Usa
std::right
ystd::setw
para Justificar correctamente la salida en C++ -
Usar la función
printf
para justificar correctamente la salida en C++
Este artículo demostrará múltiples métodos sobre cómo justificar correctamente el flujo de salida en C++.
Usa std::right
y std::setw
para Justificar correctamente la salida en C++
La biblioteca estándar de C++ proporciona funciones de ayuda al manipulador de E/S para controlar mejor los flujos cuando se usan con operadores << >>
, y se incluyen en el archivo de cabecera <iomanip>
. std::right
es uno de los manipuladores de flujos que establece la posición de los caracteres de relleno. Por lo tanto, debe ser usado en conjunto con la función de manipulador std::setw
, que se usa para establecer el ancho del flujo. std::setw
toma un único entero como argumento para especificar el número de caracteres a asignar para el ancho del flujo.
En el siguiente código de ejemplo, inicializamos un vector de double
con valores arbitrarios que tienen diferente precisión y luego los emitimos todos como se justifica en el lado derecho de la consola.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << right << setw(20) << fixed << i << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
Producción :
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
Usar la función printf
para justificar correctamente la salida en C++
Otra función poderosa para tratar con el formato de E/S es printf
. Aunque printf
no se usa con los flujos cin
y cout
, puede formatear argumentos variables por separado. Fíjate en que usamos el especificador de formato %f
para los valores de punto flotante, y usamos un número arbitrario 20
para añadir caracteres de relleno a cada elemento. Como resultado, cada línea tiene un ancho de 20 caracteres, y como el número es positivo, los caracteres de relleno se añaden desde la izquierda.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%20f\n", i);
}
return EXIT_SUCCESS;
}
Producción :
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
Alternativamente, podemos insertar un entero negativo en el especificador de formato para llenar los caracteres del lado derecho, justificando la salida a la izquierda. Otra característica poderosa del printf
es el formato de valores literales de cadena, como se demuestra en el siguiente código de muestra. Nótese que %c
es el especificador de formato char
, y el valor 0x20
es hexadecimal para un espacio.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%-20f\n", i);
}
printf("%60s\n", "this ought to be justified right");
printf("%-20s|%20c|%20s\n", "wandering", 0x20, "the tower");
return EXIT_SUCCESS;
}
Producción :
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
this ought to be justified right
wandering | | the tower
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook