25
Flujo de entrada/salida en C++ Nilton A. Garcia Hilares Introducción printf Imprimir enteros Imprimir números de punto flotante Imprimir cadenas y caracteres Otros scanf Especificadores de conversión Secuencia de rastreo Otros C++ como un C mejorado namespace std cout y cin Concatenación de operadores << / >> 2.1 CIENCIAS DE LA COMPUTACIÓN I Flujo de entrada/salida en C++ Utilizando Code::Blocks Lic. Nilton Alan García Hilares Universidad Mayor de San Marcos

cc1 clase 5

Embed Size (px)

DESCRIPTION

programación con c

Citation preview

  • 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