Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
4.1 Ingreso de datos en programas | 117 Para usar el fl ujo I/O, se debe usar la directiva de preprocesador #include <iostream> El archivo de encabezado iostream contiene, entre otras cosas, las defi niciones de dos tipos de da- tos: istream y ostream. Éstos son tipos de datos que representan fl ujos de entrada y fl ujos de sali- da, respectivamente. El archivo de encabezado contiene también declaraciones que se parecen a esto: istream cin; ostream cout; La primera declaración dice que cin es una variable de tipo istream. La segunda dice que cout es una variable de tipo ostream. Además, cin se relaciona con el dispositivo de entrada estándar (el teclado), y cout se relaciona con el dispositivo de salida estándar (por lo general, la pantalla). Como ha visto, es posible producir valores para cout mediante el operador de inserción (<<): cout << 3 * price; De modo similar, puede introducir datos desde cin por medio del operador de extracción (>>): cin >> cost; Cuando la computadora ejecuta esta sentencia, introduce el siguiente número que usted introdujo en el teclado (425, por ejemplo) y lo guarda en la variable cost. El operador de extracción >> lleva dos operandos. Su operando izquierdo es una expresión de fl ujo (en el caso más simple, sólo la variable cin). Su operando derecho es una variable donde se guardan los datos de entrada. Por el momento, se supone que la variable es de tipo simple (char, int, fl oat, etc.). Más adelante, en este capítulo, se analiza la inserción de datos de cadena. Se puede usar el operador >> varias veces en una sola sentencia de entrada. Cada ocurrencia extrae (introduce) el siguiente registro de datos desde el fl ujo de entrada. Por ejemplo, no hay dife- rencia entre la sentencia cin >> length >> width; y el par de sentencias cin >> length; cin >> width; Usar una secuencia de extracciones en una sentencia es un benefi cio para el programador. Cuando no se tiene experiencia con C++ existe la posibilidad de invertir el operador de extrac- ción (>>) y el operador de inserción (<<). A continuación se expresa una forma fácil de recordar cuál es cuál: comience siempre la sentencia con cin o cout y use el operador que apunta en la di- rección en la que van los datos. La sentencia cout << someInt; envía datos de la variable someInt al fl ujo de salida. La sentencia cin >> someInt; envía datos del fl ujo de entrada a la variable someInt. www.FreeLibros.me 118 | Capítulo 4: Entrada de datos al programa y el proceso de diseño de software La siguiente es una plantilla de sintaxis para la sentencia de entrada: InputStatement cin >> Variable >> Variable ...; A diferencia de los elementos especifi cados en una sentencia de salida, que pueden ser constantes, variables o expresiones complicadas, los elementos especifi cados en una sentencia de entrada pueden ser sólo nombres de variables. ¿Por qué? Porque una sentencia de entrada indica dónde se deben almacenar los valores de datos de entrada. Sólo los nombres de variables se refi eren a lugares de la memoria donde se pueden guardar valores mientras un programa está en ejecución. Cuando introduce datos en el teclado, debe asegurarse de que cada valor es apropiado para el tipo de datos de la variable en la sentencia de entrada. Tipo de datos de variable Datos de entrada válidos en una operación>> char Un solo carácter imprimible distinto a un espacio en blanco int Una constante literal int, precedida opcionalmente por un signo fl oat Una constante literal int o fl oat (posiblemente en notación científi ca, E), precedida opcionalmente por un signo Observe que cuando introduce un número en una variable fl oat, el valor de entrada no tiene un punto decimal. El valor entero es forzado automáticamente a un valor fl oat. Cualquier otra incon- gruencia, como tratar de introducir un valor fl oat en una variable int o un valor char en una va- riable fl oat, puede originar resultados inesperados o graves. Más adelante, en este capítulo, se ana- liza lo que podría suceder. Al buscar el siguiente valor de entrada en el fl ujo, el operador >> omite caracteres de espacio en blanco. Estos caracteres no se imprimen, como el carácter que marca el fi n de una línea. (En la si- guiente sección se habla acerca de este carácter de fi n de línea.) Después de omitir algún carácter de espacio en blanco, el operador >> procede a extraer el valor de datos deseado del fl ujo de entrada. Si este valor de datos es un valor char, la introducción se detiene tan pronto se introduce un solo ca- rácter. Si el valor de datos es int o fl oat, la inserción del número se detiene en el primer carácter que es inapropiado para el tipo de datos, como un carácter de espacio en blanco. A continuación se dan algunos ejemplos, donde i, j y k son variables int, ch es una variable char, y x es una variable fl oat: Sentencia Datos Contenido después del ingreso 1. cin >> i; 32 i = 32 2. cin >> i >> j; 4 60 i = 4, j = 60 3. cin >> i >> ch >> x; 25 A 16.9 i = 25, ch = 'A', x = 16.9 4. cin >> i >> ch >> x; 25 A 16.9 i = 25, ch = 'A', x = 16.9 5. cin >> i >> ch >> x; 25A16.9 i = 25, ch = 'A', x = 16.9 6. cin >> i >> j >> x; 12 8 i = 12, j = 8 (La computadora espera un tercer número) 7. cin >> i >> x; 46 32.4 15 i = 46, x = 32.4 (15 se mantiene para ingreso posterior) www.FreeLibros.me 4.1 Ingreso de datos en programas | 119 Los ejemplos (1) y (2) son directos de introducción de enteros. El ejemplo (3) muestra que los valores de datos de caracteres no van entre comillas cuando se introducen (las constantes de carac- teres entre comillas son necesarias en un programa para distinguirlas de los identifi cadores). En el ejemplo 4 se muestra cómo el proceso de omitir caracteres de espacio en blanco incluye pasar a la siguiente línea de entrada si es necesario. En el ejemplo (5) se ilustra que el primer carácter encon- trado, que es inapropiado para un tipo de datos numérico, termina el número. El ingreso para la variable i se detiene en el carácter de entrada A, después A se guarda en ch, y después el ingreso para x se detiene al fi nal de la línea de entrada. El ejemplo 6 muestra que si usted está en el teclado y no ha introducido valores sufi cientes para satisfacer la sentencia de entrada, la computadora espera (y se mantiene en espera de) más datos. El ejemplo (7) muestra que si se introducen más valores que las variables existentes en la sentencia de entrada, los valores extra permanecen en espera en el fl ujo de entrada hasta que pueden ser leídos por la siguiente sentencia de entrada. Si hay valores extra res- tantes cuando termina el programa, la computadora los ignora. Marcador de lectura y carácter de nueva línea Para ayudar a explicar el ingreso de fl ujo con más detalle, se introduce el concepto del marcador de lectura. El marcador de lectura funciona como un separador de libro, pero en lugar de marcar un lugar en un libro, sigue la pista del punto en el fl ujo de entrada donde la computadora debe continuar le- yendo. El marcador de lectura indica el siguiente carácter que habrá de leerse. El operador de extracción >> deja el marcador de lectura en el carácter que sigue a la última pieza de datos que se introdujo. Cada línea de entrada tiene un carácter invisible de fi n de línea (el carácter de nueva línea) que dice a la computadora dónde termina una línea y comienza la siguiente. Para hallar el siguiente valor de entrada, el operador >> cruza los límites de línea (caracteres de nueva línea) si tiene que ser así. ¿De dónde viene el carácter de nueva línea? ¿Qué es? La respuesta a la primera pregunta es fácil. Cuando usted está trabajando en un teclado, genera un carácter de nueva línea cada vez que oprime la tecla Return o Enter. Su programa genera también un carácter de nueva línea cuando usa el manipulador endl en una sentencia de salida. El manipulador endl produce una línea nueva, indicando al cursor en pantalla que vaya a la siguiente línea. La respuestaa la segunda pregunta varía de una computadora a otra. El carácter de nueva línea es un carácter de control no imprimible que el sistema reconoce como indicador de fi n de una línea, si no es una línea de entrada o una línea de salida. En un programa C++, se puede hacer referencia al carácter de nueva línea por medio de los sím- bolos \n, una barra inversa y una n sin ningún espacio entre ellas. Aunque \n consta de dos símbo- los, se refi ere a un solo carácter, el carácter de nueva línea. De la misma manera es posible almacenar la letra A en una variable char ch, como ésta: ch = 'A'; se puede guardar el carácter de nueva línea en una variable: ch = '\n'; También se puede colocar el carácter de nueva línea en una cadena, del mismo modo que colocaría cualquier carácter imprimible: cout << "Hello\n"; Esta sentencia tiene exactamente el mismo efecto que la sentencia cout << "Hello" << endl; Regresemos a la explicación de ingreso de datos. Considérense algunos ejemplos con el marcador de lectura y el carácter de nueva línea. En la tabla siguiente, i es una variable int, ch es una varia- ble char y x es una variable fl oat. Las sentencias de entrada producen los resultados mostrados. La parte del fl ujo de entrada sombreada es lo que se ha extraído mediante las sentencias de entrada. El marcador de lectura, denotado por el bloque sombreado, indica el siguiente carácter que habrá de leerse. El símbolo \n denota el carácter de nueva línea producido al oprimir la tecla de retorno. www.FreeLibros.me
Compartir