José Díaz 3/4/2001

Salida de datos formateados en C++

En los programas de cálculo numérico es usualmente necesario darle un determinado formato a los datos, sea bien por razones estéticas como para no perder información debido a un número insuficiente de dígitos o no imprimir información superflua causada por un número excesivo de cifras decimales.

C++ tiene una serie de funciones para este propósito. Para controlar la anchura del campo está la funcion width de la clase ostream. La inclusión de la línea 
cout.width(25);
origina un campo se salida con una anchura de 25 caracteres. Igualmente se puede controlar el número de dígitos con la función precision. La sentencia

cout.precision(10);
me origina una salida con 10 dígitos. La función width sólo actua en la salida inmediatamente posterior a la llamada de la función mientras que precision() es válida hasta que se modifique con una nueva llamada a precision().

Tambien se puede conseguir el fijar la anchura del campo y el número de dígitos mediante los llamados manipuladores setw y setprecision.

cout << setw(25) << setprecision(10) << r << setw(10) << setprecision(5) << d << endl;
produce la impresion de r en un campo de anchura 25 y con 10 digitos y de d en un campo de anchura 10 con 5 dígitos.

La función width() fija el mínimo número de caracteres. Si la cifra imprimida tiene más dígitos no decimales, se produce la salida de los caracteres necesarios prara no perder información.

Una forma adicional es mediante la función setf de la clase ios_base. Aunque su nombre standard es ios_base, muchos compiladores, entre ellos g++ y MVC++ reconocen esa clase como simplemente ios y es la notación que empleremos en lo que sigue. Hay tres tipos de formato: general, fixed y scientific. Con fixed y scientific la precision establece el número de cifras después del punto decimal. Con la general establece el número de espacios ocupados contando los dígitos y el punto decimal.

cout.setf(ios::fixed,ios::floatfield);

produce una salida con punto decimal mientras que

cout.setf(ios::scientific,ios::floatfield);

produce una salida en notación exponencial.

La sentencia

cout.setf(0,ios::floatfield);

restablece los valores por defecto(tipo general).

Los números se pueden ajustar a la derecha o izquierda del campo con

cout.setf(ios::left,ios::adjustfield); // ajuste a la izquierda.

cout.setf(ios::right,ios::adjustfield); // ajuste a la derecha.

cout.setf(ios::internal,ios::adjustfield); // Blancos entre signo y número.


File translated from TEX by TTH, version 2.51.
On 8 Jun 2001, 14:44.