Logo Studenta

programacion c ejercicios resueltos-49

¡Estudia con miles de materiales!

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

Continuar navegando