Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Entrada y salida estándar en C++




Enviado por apalate



    1. Operaciones de
      salida.
    2. Operaciones de
      entrada
    3. Anexos

    Cuando nos referimos a entrada/salida estándar
    (E/S estándar) queremos decir que los datos o bien se
    están leyendo del teclado,
    ó bien se están escribiendo en el monitor de
    video. Como se
    utilizan muy frecuentemente se consideran como los dispositivos
    de E/S por default y no necesitan ser nombrados en las
    instrucciones de E/S.

    En el lenguaje
    c++ tenemos varias alternativas para ingresar y/o mostrar datos,
    dependiendo de la librería que vamos a utilizar para
    desarrollar el programa, entre
    estas están: iostream.h y
    sodio.h.

    < IOSTREAM.H>

    Las operaciones de
    entrada y salida no forman parte del conjunto de sentencias de
    C++, sino que pertenecen al conjunto de funciones y
    clases de la biblioteca
    estándar de C++. Ellas se incluyen en los archivos de
    cabecera iostream.h
    por lo que siempre que queramos utilizarlas
    deberemos introducir la línea de código #include
    <iostream.h>

       Esta biblioteca es una
    implementación orientada a objetos y está basada en
    el concepto de
    flujos. A nivel abstracto un flujo es un medio de
    describir la secuencia de datos de una fuente a un destino o
    sumidero. Así, por ejemplo, cuando se introducen
    caracteres desde el teclado, se puede pensar en caracteres que
    fluyen o se trasladan desde el teclado a las estructuras de
    datos del programa.

        Los objetos de flujo que vienen
    predefinidos serán:

    1. cin,
      que toma caracteres de la entrada estándar
      (teclado);
    2. cout,
      pone caracteres en la salida estándar
      (pantalla);
    3. cerr y clog
      ponen mensajes de error en la salida
      estándar.

    Estos objetos se utilizan mediante los operadores
    << y >>. El
    operador << se denomina operador de inserción; y
    apunta al objeto donde tiene que enviar la información. Por lo tanto la sintaxis de
    cout será:

                       
    cout<<variable1<<variable2<<…<<variablen;

    No olvidemos que las cadenas de texto son
    variables y se
    ponen entre " " (comillas dobles).

    Por su parte >> se denomina operador de
    extracción, lee información del flujo cin (a la
    izquierda del operador) y las almacena en las variables indicadas
    a la derecha).
        La sintaxis sería la
    siguiente:

                           
    cin>>variable1>>…>>variablen;

           Un
    ejemplo de código utilizando ambos objetos podría
    ser el siguiente:

    #include <iostream.h>

    main ()
    {
        int i;
        cout<<"Introduce un número";
        cin>>i;
        …
    }

      Que
    mostraría por pantalla la frase "Introduce un
    número" y posteriormente almacenaría el valor
    introducido por teclado en la variable i.

    <STDIO.H>

    Operaciones de salida.

    Printf: Imprimir
    en pantalla

    Para utilizar la función
    printf en nuestros programas debemos
    incluir la directiva:

    #include
    <stdio.h>

    Si sólo queremos imprimir
    una cadena basta con escribir la siguiente línea de
    código.

    printf( "Cadena"
    );

    Como resultado muestra en
    pantalla:

    Cadena

    Lo que pongamos entre las comillas
    es lo que vamos a sacar por pantalla.

    Si volvemos a usar otro printf,
    por ejemplo:

    #include
    <stdio.h>

    void
    main()

    {

    printf( "Cadena"
    );

    printf( "Segunda"
    );

    }

    Obtendremos:

    CadenaSegunda

    Este ejemplo nos muestra
    cómo funciona printf. Para escribir en la pantalla se usa
    un cursor que no vemos. Cuando escribimos algo el cursor va al
    final del texto. Cuando el texto llega al final de la fila, lo
    siguiente que pongamos irá a la fila siguiente. Si lo que
    queremos es sacar cada una en una línea deberemos usar
    "n". Es el indicador de retorno de carro. Lo que hace es saltar
    el cursor de escritura a la
    línea siguiente:

    #include
    <stdio.h>

    void
    main()

    {

    printf( "Cadenan"
    );

    printf( "Segunda"
    );

    }

    y tendremos:

    Cadena

    Segunda

    También podemos
    poner más de una cadena dentro del
    printf:

    printf( "Primera
    cadena" "Segunda cadena" );

    Lo que no podemos hacer es meter
    cosas entre las cadenas:

    printf( "Primera
    cadena" texto en medio "Segunda cadena" );

    esto no es válido. Cuando
    el compilador intenta interpretar esta sentencia se
    encuentra "Primera
    cadena"
    y luego texto en medio, no sabe qué
    hacer con ello y da un error.

    Pero ¿qué pasa si
    queremos imprimir el símbolo " en pantalla? Por ejemplo imaginemos
    que queremos escribir:

    Esto es
    "extraño"

    Si para ello
    hacemos:

    printf( "Esto es
    "extraño"" );

    obtendremos unos cuantos errores.
    El problema es que el símbolo " se usa para indicar al compilador el
    comienzo o el final de una cadena. Así que en realidad le
    estaríamos dando la cadena "Esto es", luego
    extraño y luego
    otra cadena vacía "". Pues resulta que
    printf no admite esto y
    de nuevo tenemos errores.

    La solución es usar
    ".
    Veamos:

    printf( "Esto es
    "extraño"" );

    Esta vez todo irá como la
    seda. Como vemos la contrabarra '' sirve para indicarle al compilador
    que escriba caracteres que de otra forma no
    podríamos.

    Esta contrabarra se usa en C para
    indicar al compilador que queremos meter símbolos especiales. Pero ¿Y si lo
    que queremos es usar '' como un carácter normal y poner por ejemplo
    HolaAdiós? Pues
    muy fácil, volvemos a usar '':

    printf(
    "Hola\Adiós" );

    y esta doble
    '' indica a C
    que lo que queremos es mostrar una ''.

    Operaciones de
    entrada

    Algo muy usual en un programa es esperar que el
    usuario introduzca datos por el teclado. Para ello contamos con
    varias posibilidades: Usar las funciones de la biblioteca
    estándar, crear nuestras propias interrupciones de teclado
    (MS-Dos) o usar
    funciones de alguna biblioteca diferente (como por ejemplo
    Allegro).

    En este trabajo topare
    solo la primera opción, usando las funciones de la
    biblioteca estándar. Pero veamos por encima las otras
    posibilidades.

    Las funciones estándar
    están bien para un programa sencillito. Pero cuando
    queremos hacer juegos por
    ejemplo, no suelen ser suficiente. Demasiado lentas o no nos dan
    todas las posibilidades que buscamos, como comprobar si hay
    varias teclas pulsadas. Para solucionar esto tenemos dos
    posibilidades:

    La más complicada es crear
    nuestras propias interrupciones de teclado. ¿Qué es
    una interrupción de teclado? Es un pequeño programa
    en memoria que se
    ejecuta continuamente y comprueba el estado del
    teclado. Podemos crear uno nuestro y hacer que el ordenador use
    el que hemos creado en vez del suyo.

    Otra posibilidad más
    sencilla es usar una biblioteca que tenga funciones para
    controlar el teclado. Por ejemplo si usamos la biblioteca
    Allegro, ella misma hace todo el trabajo y
    nosotros no tenemos más que recoger sus frutos con un par
    de sencillas instrucciones. Esto soluciona mucho el trabajo y nos
    libra de tener que aprender cómo funcionan los aspectos
    más oscuros del control del
    teclado.

    Vamos ahora con las funciones de
    la biblioteca estándar antes mencionada.

    Scanf

    El uso de scanf es muy similar al
    de printf con una diferencia, nos da la posibilidad de que el
    usuario introduzca datos en vez de mostrarlos. No nos permite
    mostrar texto en la pantalla, por eso si queremos mostrar un
    mensaje usamos un printf delante. Un ejemplo:

    #include
    <stdio.h>

    void
    main()

    {

    int
    num;

    printf(
    "Introduce un número " );

    scanf( "%i",
    &num );

    printf( "Has
    tecleado el número %in", num );

    }

    Primero vamos a ver unas nota de
    estética, para hacer los programas un poco
    más elegantes. Parece una tontería, pero los
    pequeños detalles hacen que un programa gane mucho. El
    scanf no mueve el cursor de su posición actual, así
    que en nuestro ejemplo queda:

    Introduce un
    número _ /* La barra horizontal indica dónde esta
    el cursor */

    Esto es porque en el printf no
    hemos puesto al final el símbolo de salto de línea
    'n'. Además hemos dejado un espacio al final de
    Introduce un número: para que así cuando
    tecleemos el número no salga pegado al mensaje. Si no
    hubiésemos dejado el espacio quedaría así al
    introducir el número 120 (es un
    ejemplo):

    Introduce un
    número120

    Veamos cómo funciona el
    scanf. Lo primero nos fijamos que hay una cadena entre comillas.
    Esta es similar a la de printf, nos sirve para indicarle al
    compilador qué tipo de datos estamos pidiendo. Como en
    este caso es un integer usamos %i. Después de la coma
    tenemos la variable donde almacenamos el dato, en este caso
    'num'.

    Fíjate que en el scanf la
    variable 'num' lleva delante el símbolo &, este
    es muy importante, sirve para indicar al compilador cual es la
    dirección (o posición en la memoria) de
    la variable.

    Podemos preguntar por más
    de una variable a la vez en un sólo scanf, hay que poner
    un %i por cada variable:

    #include
    <stdio.h>

    void
    main()

    {

    int a, b,
    c;

    printf(
    "Introduce tres números: " );

    scanf( "%i %i
    %i", &a, &b, &c );

    printf( "Has
    tecleado los números %i %i %in", a, b, c
    );

    }

    De esta forma cuando el usuario
    ejecuta el programa debe introducir los tres datos separados por
    un espacio.

    También podemos pedir en un
    mismo scanf variables de distinto tipo:

    #include
    <stdio.h>

    void
    main()

    {

    int
    a;

    float
    b;

    printf(
    "Introduce dos números: " );

    scanf( "%i %f",
    &a, &b );

    printf( "Has
    tecleado los números %i %fn", a, b );

    }

    A cada modificador (%i, %f)
    le debe corresponder una variable de su mismo tipo. Es decir, al
    poner un %i el compilador espera que su variable correspondiente
    sea de tipo int. Si ponemos %f espera una variable tipo
    float.

    Getch y
    getche

    Si lo que queremos es que el
    usuario introduzca un carácter por el teclado usamos las
    funciones getch
    y getche.
    Estas esperan a que el usuario introduzca un carácter por
    el teclado. La diferencia entre getche y getch es que la primera saca por
    pantalla la tecla que hemos pulsado y la segunda no (la e del
    final se refiere a echo=eco). Ejemplos:

    #include
    <stdio.h>

    void
    main()

    {

    char
    letra;

    printf(
    "Introduce una letra: " );

    fflush( stdout
    );

    letra =
    getche();

    printf( "nHas
    introducido la letra: %c", letra );

    }

    Resultado:

    Introduce una
    letra: a

    Has introducido
    la letra: a

    ¿Qué es el
    fflush( stdout )?. Pues bien,
    cuando usamos la función printf, no escribimos directamente en la
    pantalla, sino en una memoria intermedia (lo que llaman un
    bufer). Cuando este
    bufer se llena o cuando
    metemos un carácter 'n' es cuando se envía el texto a
    la pantalla. En este ejemplo yo quería que apareciera el
    mensaje Introduce una letra: y el cursor se quedara justo
    después, es decir, sin usar 'n'. Si se hace esto, en algunos compiladores el
    mensaje no se muestra en pantalla hasta que se pulsa una tecla
    (probar). Y la función fflush( stdout ) lo que hace es enviar a
    la pantalla lo que hay en ese bufer.

    Y ahora un ejemplo con
    getch:

    #include
    <stdio.h>

    void
    main()

    {

    char
    letra;

    printf(
    "Introduce una letra: " );

    fflush( stdout
    );

    letra =
    getch();

    printf("n has
    introducido la letra :%c", letra );

    }

    Resultado:

    Introduce una
    letra:

    Has introducido
    la letra: a

    Como vemos la única
    diferencia es que en el primer ejemplo se muestra en pantalla lo
    que escribimos y en el segundo no.

    ANEXOS

    Usos de printf y
    scanf

    printf("Mensaje");
    printf("Mensaje %d",Variable);
    printf("Mensaje %d",Variable:2:3);
    cprintf("Mensaje");

    Escribe Mensaje en la pantalla
    Escribe Mensaje y el valor de la Variable en pantalla
    Escribe Mensaje y el valor de la Variable con 2 enteros y 3
    decimales
    Escribe Mensaje en color
    especificado

    scanf("%d",&Variable);
    scanf("%d %f",&Variable1,&Variable2);

    Asigna valor entero a Variable
    Asigna valor entero a Variable1 y valor real a
    Variable2

     

     

     

    Nota

    C++ ofrece una alternativa a
    las llamadas de funcion
    printf y scanf para manejar la entrada/salida de
    los tipos y cadenas de datos estandar. Así en lugar
    de printf usamos el
    flujo estandar de salida cout
    y el operador <<
    ("colocar en"); y en lugar de scanf usamos el flujo de entrada
    estandar cin y el
    operador >>("obtener
    de"). Estos operadores de inserción y
    extracción de flujo, a diferencia de printf y scanf, no requieren de cadenas de formato
    y de formato y de especificadotes de conversión para
    indicar los tipos de datos
    que son extraidos o introducidos.

    Las siguientes funciones nos
    resultan indispensable para poder brindar
    una mejor presentación de los datos en
    pantalla.

    Gotoxy:
    Posicionando el cursor (DOS)

    Esta función sólo
    está disponible en compiladores de C que dispongan de la
    biblioteca <conio.h>

    Hemos visto que cuando usamos
    printf se escribe en la posición actual del cursor
    y se mueve el cursor al final de la cadena que hemos
    escrito.

    Vale, pero ¿qué
    pasa cuando queremos escribir en una posición determinada
    de la pantalla? La solución está en la
    función gotoxy. Supongamos que queremos escribir 'Hola' en
    la fila 10, columna 20 de la pantalla:

    #include
    <stdio.h>

    #include
    <conio.h>

    void
    main()

    {

    gotoxy( 20, 10
    );

    printf( "Hola"
    );

    }

    (Nota: para usar gotoxy hay que
    incluir la biblioteca conio.h).

    Fíjate que primero se
    pone la columna (x) y luego la fila (y). La esquina superior
    izquierda es la posición (1, 1).

    Clrscr: Borrar
    la pantalla (DOS)

    Ahora ya sólo nos falta
    saber cómo se borra la pantalla. Pues es tan fácil
    como usar:

    clrscr()

    (clear
    screen, borrar pantalla).

    Esta función nó
    solo borra la pantalla, sino que además sitúa el
    cursor en la posición (1, 1), en la esquina superior
    izquierda.

    #include
    <stdio.h>

    #include
    <conio.h>

    void
    main()

    {

    clrscr();

    printf( "Hola"
    );

    }

    Este método
    sólo vale para compiladores que incluyan el fichero
    stdio.h.

    BIBLIOGRAFÍA

    Como programar en C/C++. H.M.
    Deitel / P.J. Deitel. Prentice may, 2da ed.
    1995.

    Programación orientada a
    objetos con C++. Fco. Javier Ceballos. Ed. ra-ma
    1993.

    Programacion en C++. Enrique
    hernandez / Jose hernandez. Ed. Paraninfo
    1993.

    EN
    INTERNET

    www.lawebdelprogramador.com

    http://www.publispain.com/supertutoriales/programacion

     

    Autor:

    Palate Gaibor Alex
    Fernando

    Datos personales:


    .

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter