-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.1
CIENCIAS DE LACOMPUTACIN I
Flujo de entrada/salida en C++Utilizando Code::Blocks
Lic. Nilton Alan Garca HilaresUniversidad Mayor de San
Marcos
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.2
Contenido
Introduccin
printfImprimir enterosImprimir nmeros de punto flotanteImprimir
cadenas y caracteresOtros
scanfEspecificadores de conversinSecuencia de rastreoOtros
C++ como un C mejoradonamespace stdcout y cinConcatenacin de
operadores >
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.3
Introduccin
Una parte importante en la solucin de cualquier problema esla
presentacin de los resultados. Para eso veremos lascaractersticas
de formato de las funciones scanf y printf.Estn funciones as como
gets, puts, getchar y putchar seencuentran en la librera stdio. Ya
se han visto algunascaractersticas de las funciones scanf y printf
en clasesanteriores. En esta clase se resumirn dichas
caractersticasadems de mostrar nuevas.
Como incluir librerias?
Mediante sentencias del tipo:#include
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.4
Salida con formato usando printfUtilizando printf se consigue un
formato de salida preciso. Cadallamada a printf contiene una cadena
de control de formato, quedescribe el formato de la salida. La
cadena de formato consiste deespecificadores de conversin,
banderas, anchos de campo,precisiones y caracteres literales junto
con el signo ( %). La funcinprintf puede llevar a cabo las
siguientes capacidades de formato:
1 Redondear valores de punto flotante, a un numero indicado
dedecimales.
2 Alinear una columna de nmeros decimales, con puntosdecimales
apareciendo uno por encima de otro.
3 Salidas justificadas a la derecha o a la izquierda.4 Insertar
caracteres literales en posiciones precisas en una lnea
de salida.5 Representacin en formato exponencial de nmeros de
punto
flotante.6 Representacin en formato octal y hexadecimal de
enteros sin
signo.7 Despliegue de todo tipo de datos con anchos de campo
de
tamao fijo y precisiones.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.5
Salida con formato usando printf
La funcin printf tiene el siguiente formato
Formato
printf(Cadena de control de formato,Argumentos)
Cadena de control de formato, describe el formato desalida y
Argumentos, estos son opcionales, corresponden acada especificacin
de conversin existente en la cadena decontrol de formato, cada
especificacin de conversin deformato empieza por un %. En la cadena
de control de formatopueden existir varias especificaciones de
conversin deformato y por cada una de ellas debe haber un
argumento. Elcual lleva el valor de dicha especificacin.
Error comn
Olvidar encerrar entre comillas ()una cadena de control
deformato.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.6
Imprimir enteros
Un entero es un numero completo, ya sea 123 o 69, que nocontiene
punto decimal. Los valores enteros se puedenimprimir en varios
formatos, para los cuales tenemos lossiguientes especificadores de
conversin (EC).
EC Descripcind, i Despliega un entero con signo.o, u Despliega
un entero sin signo.x, X Muestra un entero hexadecimal sin
signo
h Se coloca antes de un EC de enteros paraindicar que se muestra
un entero short.
l Se coloca antes de un EC de enteros paraindicar que se muestra
un entero long.
Ejemplo
Elabore un programa para mostrar nmeros enteros utilizandotodos
los formatos anteriores
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.7
Imprimir nmeros de punto flotanteUn valor en punto flotante,
contiene un punto decimal como en66.6 o 1.23. Los valores en punto
flotante se pueden imprimiren varios formatos, para los cuales
tenemos los siguientesespecificadores de conversin (EC).
EC Descripcinf Muestra un valor en punto flotante.
e, E Muestra un valor en punto flotante ennotacin exponencial.g,
G Despliega un valor en punto flotante (f o e/E).
L Se coloca antes de un EC de punto flotante paraindicar que se
muestra un valor long double.
Nota
La notacin exponencial es el equivalente en computadora dela
notacin cientfica utilizada en matemticas. Poe ejemplo
Valor Notacin exponencial Notacin cientfica314.1592 3.141592102
3.141592E+02
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.8
Imprimir cadenas y caracteres
EC Descripcinc Se utiliza para imprimir un argumento char.
s Se utiliza para imprimir caracteres hasta queencuentre un
carcter de terminacin NULL(\0).
Errores Comunes
1 Utilizar %c para imprimir el primer carcter de una cadena.2
Utilizar %s para imprimir un argumento char, el EC %s
espera una cadena por lo que esto causar un error entiempo de
ejecucin conocido como violacin de acceso.
3 utilizar comillas sencillas () alrededor de cadenas
decaracteres. Las cadenas de caracteres deben estarencerradas entre
comillas dobles ().
4 Utilizar comillas dobles para encerrar una constante
decarcter. Esto de hecho genera una cadena formada pordos
caracteres, el primero el valor de la constante y elsegundo el
carcter de terminacin NULL. Una constantede carcter va encerrado
entre comillas simples ()
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.9
Otros especificadores de conversin
Los tres especificadores de conversin restantes son
EC Descripcinp Muestra el valor de un apuntador.n Almacena el
numero de caracteres ya extrados.
% Argumento correspondiente. La funcin printf utilizael
enunciado % % para imprimir el carcter %.
Nota
El EC p despliega la direccin del apuntador en forma depuesta en
marcha definida. En muchos sistemas se utiliza lanotacin
hexadecimal en vez de la notacin decimal.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.10
Imprimir con anchos de campo y precisionesEl tamao exacto de un
campo en el cual se imprimen datos seespecifica por el ancho de
campo. Un entero que representa elancho de campo es insertado en la
especificacin deconversion entre el signo por ciento ( %) y el
EC.
Error comn
No proporcionar un ancho de campo lo suficientementeextenso para
manejar un valor a imprimirse. Esto puededesplazar otros datos
produciendo salidas confusas.
La precision tiene significados distintos para los
diferentestipos de datos. Para utilizar la precision coloque un
punto (.)seguido por un entero que representa la precision, entre
elsigno por ciento ( %) y el EC.
Nota
Se puede combinar el ancho de campo y la precision,colocando el
ancho de campo seguido del punto decimal,seguido de la precision
entre el signo % y el EC.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.11
Imprimir literales y secuencias de escape
Hay algunos literales que son utilizados como parte de
laestructura del lenguaje, por lo que requieren un comando paraser
utilizados como parte literal de una cadena de caracteres.
Comando Descripcin\ Salida del carcter de una sola comilla ().\
Salida del carcter de comillas dobles ().\\ Salida del carcter
diagonal invertida (\).\b Mueve el cursor una posicin hacia atrsen
la lnea actual.\n Mueve el cursor al inicio de la lnea siguiente.\t
Mueve el cursor a la siguiente posicin enel tabulador horizontal.\r
Mueve el cursor al inicio de la lnea actual.\v Mueve el cursor a la
siguiente posicin enel tabulador vertical.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.12
Formato de entrada utilizando scanf
Cada enunciado scanf contiene una cadena de control deformato
que describe el formato de los datos que seintroducen. La cadena de
control de formato est formada deespecificaciones de conversin y
caracteres literales. Lafuncin scanf tiene las siguientes
capacidades de formato deentrada:
Entrada de todo tipo de datos.Entrada de caracteres
especficos.Omitir caracteres especficos.
Formato
scanf(Cadena de control de formato, Argumentos)
Cadena de control de formato describe los formatos deentrada y
Argumentos son apuntadores a variables donde sealmacenan las
entradas.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.13
Especificadores de conversin
EC DescripcinEnteros
d Lee un entero decimal, opcionalmente con signo.
i Lee un entero decimal, octal o hexadecimal,opcionalmente con
signo.o Lee un entero octal sin signo.u Lee un entero decimal sin
signo.
x/X Lee un entero hexadecimal sin signo.
h/L Se coloca antes de cualquier EC entero paraindicar que es un
entero short/long respectivamente.Punto flotante
e/E f/F g/E Lee un valor en punto flotante.
l/L Se coloca delante de cualquier EC de punto flotantepara
indicar que es un valor double/long double.Caracteres y cadenas
c Lee un carcters Lee una cadena
[Rastreo] Rastrea una cadena buscando un conjunto decaracteres
almacenados en un arreglo.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.14
Secuencia de rastreo
Se puede ingresar un conjunto de caracteres utilizando un
Rastreo,un Rastreo es un conjunto de caracteres encerrados entre
corchetes([]) y presididos por un signo por ciento en la cadena de
control deformato.
Formato
char Cadena[20];scanf( % [Rastreo],Cadena)
Un rastreo limita el flujo de entrada a los caracteres
contenidos en elRastreo. Cada vez que se encuentre un carcter, se
almacena en elargumento correspondiente y deja de introducir
caracteres cuando seencuentra algn carcter no contenido en el
Rastreo.
Si el primer carcter introducido no coincide con alguno
contenido enel Rastreo solo se almacena el carcter NULL en el
argumento.
El Rastreo tambin se puede utilizar para buscar caracteres que
noestn contenidos en el Rastreo, utilizando un Rastreo invertido.
Parahacer un Rastreo invertido coloque un acento circunflejo () en
loscorchetes antes del Rastreo.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.15
Ancho de campo
En la funcion scanf se puede especificar el ancho de campopara
leer un nmero especifico de caracteres a partir de unflujo de
entrada.
Ejemplo
Escriba en orden inverso los dgitos de un nmero de 4 dgitos.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.16
Omisin de caracteresa menudo es necesario hacer una omisin de
caracteres en elflujo de entrada.
Ejemplo
Una fecha puede ser introducida mediante alguno de lossiguientes
formatos
24 12 201128\07\2011
De los cuales es importante almacenar los nmeros y
losseparadores pueden ser descartados.
A fin de eliminar caracteres innecesarios, inclyalos en lacadena
de control de formato de scanf.
Ejemplo
Para el caso de las fechasscanf( %d- %d-
%d,&D,&M,&A);scanf(
%d\\%d\\%d,&D,&M,&A);
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.17
Ejemplo
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.18
Suspensin de asignacin
La funcin scanf proporciona un carcter de suspensin deasignacin
(*). El carcter de suspensin le permite a scanfleer cualquier tipo
de datos a partir de la entrada y descartarlossin asignarlos a una
variable. El carcter de suspensin secoloca entre el signo de
porcentaje ( %) y un EC.
Ejemplo
En el ejemplo de las fechas tambin se pudo utilizar espaciosen
blanco como separadores. Para evitar una declaracin paracada tipo
de separadores utilizados se puede utilizar unasuspensin de
asignacin de datos tipo char como muestra elsiguiente cdigo.
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.19
Cdigo en C++
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.20
namespace std
Las libreras estndar de C/C++ (# include )definen funciones,
estructuras, tipos, etc. utilizando nombresespecficos para cada uno
de los objetos que definen; esposible utilizar alguno de dichos
nombres en alguna denuestras propias funciones, estructuras, tipos,
etc. lo cualprovocara errores difciles de detectar y/o
corregir.
La solucin establecida en C++ son los namespace o espaciode
nombres, los cuales se utilizan para delimitar el mbito delos
nombres utilizados.
Ejemplo
namespace Newton{int y=1;}Newton::y;
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.21
namespace std
C++ han puesto todos los nombres estndar en el namespacestd. Por
ejemplo para utilizar la entrada/salida estndar de C++se debe
incluir el archivo de cabecera iostream que contienelos macros cout
y cin.
Ejemplo
# include using namespace stdint main(){cout
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.22
namespace std
El uso de namespace permite que se use una libreraestndar, sin
ningn problema; esto tiene ms importancia sinos damos cuenta de que
para evitar nombres repetidos NOhay que memorizar los cientos de
nombres usados por laslibreras estndar de C++. Las libreras
asociadas alnamespace std son incluidas mediante #include yno
#include .
Aqu estn algunos nombres de las libreras viejas (de C/C++no
estndar) y las nuevas (de C++ estndar, que usannamespace std)
Libreras antiguas Libreras standard#include #include #include
#include #include #include #include #include
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.23
cout y cin
C++ ofrece una alternativa a las llamadas de funcin printf
yscanf para manejar la entrada y salida de los tipos de
datosestndar. Por ejemplo consideremos las siguientes
sentencias
Ejemplo
printf(Ingrese un numero);scanf( %d,&N);printf(\n El numero
es : ,N);
A continuacin realizaremos las mismas accin pero con losmacros
cout y cin definidos en la librera estndar iostream.
Ejemplo
coutN;cout
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.24
Concatenacin de operadores > y endl
los operadores > se pueden utilizar de formaconcatenada, es
decir en la misma sentencia.
Formato
cout> Variable n;
As mismo en la librera iostream se encuentra el manipuladorendl
el cual es equivalente al carcter de interrupcin \n seutiliza
seguido de un operador de insercin de flujo (
-
Flujo deentrada/salida en
C++
Nilton A. GarciaHilares
Introduccin
printfImprimir enteros
Imprimir nmeros de puntoflotante
Imprimir cadenas ycaracteres
Otros
scanfEspecificadores deconversin
Secuencia de rastreo
Otros
C++ como un Cmejoradonamespace std
cout y cin
Concatenacin deoperadores>
2.25
Cdigo en C++
IntroduccinprintfImprimir enterosImprimir nmeros de punto
flotanteImprimir cadenas y caracteresOtros
scanfEspecificadores de conversinSecuencia de rastreoOtros
C++ como un C mejoradonamespace stdcout y cinConcatenacin de
operadores