UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Entradas y salidas En C++ se utilizan los objetos de flujo cin (flujo de entrada estándar) y cout (flujo de salida estándar) para la entrada y salida de datos, combinados con los operadores de direccionamiento >> y << que se encargan de direccionan el flujo de datos desde o hacia el dispositivo referenciado. Para su funcionamiento se requiere incluir la biblioteca iostream. #include<iostream> cin >> se utiliza para almacenar datos, digitados por el usuario, en una variable previamente definida. Al ejecutarlo se produce una pausa en el programa hasta que el usuario introduzca un dato por teclado. Ejemplo: #include <iostream> using namespace std; int main() { int x; cout << “Digite un valor numerico : ”; cin >> x; cout <<endl <<”El numero es: ” <<x; cout <<endl; return 0; } Se ha declarado la variable x de tipo entero Se muestra un mensaje al usuario indicándole que digite un valor numérico. El programa realizará una pausa hasta que el usuario digite un valor El valor digitado por el usuario se almacena en la variable x. Se imprime un mensaje El numero es: y en seguida se muestra el número digitado por el usuario (valor almacenado en la variable x) Se realiza un salto de línea. U1 Página 14 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Con un solo cin>>, se pueden leer varios datos, sin embargo es indispensable que se le indique al usuario que después de cada dato digite enter para que el dato sea almacenado en la variable respectiva (aunque lo que el compilador verifica es que se haya digitado un espacio en blanco, o un equivalente como la pulsación de las teclas de tabulado, espaciado o enter). Ejemplo: #include <iostream> using namespace std; int main() { int numero1,numero2,numero3; cout << “Digite 3 valores numéricos. Por favor digite espacio o enter después de cada valor ”; cin >> numero1>> numero2>> numero3; cout <<endl <<Los valores almacenados son: “ <<numero1 <<”\t” <<numero2 <<”\t” <<numero3; cout <<endl; return 0; } Esta codificación permitirá que el usuario digite 3 datos que se almacenarán en las variables numero1, numero2 y numero3. Después de cada dato digitado se debe pulsar enter, tabulado o espaciado. Al imprimir los datos almacenados se ha utilizado la secuencia de escape “\t” para indicar espacios de tabulación. Es más recomendable que para cada dato requerido, se le informe al usuario mediante un mensaje. cout<< “Digite primer valor : “; cin>> numero1; cout<< endl <<“Digite segundo valor : “; cin>> numero2; U1 Página 15 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION cout<< endl <<“Digite tercer valor : “; cin>> numero3; Para almacenar datos de tipo carácter existen varias posibilidades: Una de ellas es utilizando cin.get(), cuya sintaxis es: identificador = cin.get(); Ejemplo: #include <iostream> using namespace std; int main() { char caracter1; cout << "Digite una letra: "; caracter1=cin.get(); cout <<endl<<"La letra digitada es: "<<caracter1; return 0; } Analice la siguiente codificación donde se almacenan 2 caracteres: #include <iostream> using namespace std; int main() { char caracter1,caracter2; cout << "Digite la primera letra: "; caracter1=cin.get(); cout << endl <<"digite la segunda letra: "; caracter2=cin.get(); cout <<endl<<"las letras son: "<<caracter1<<caracter2; return 0; } U1 Página 16 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Al ejecutarlo se puede observar que el programa, sólo permite al usuario digitar el primer carácter e imprime resultados. Este error en la ejecución se produce porque al digitar enter, esto se asume como el segundo carácter, (‘\n’), se almacena en la variable caracter2 y provoca una lectura incorrecta. Para corregir el problema se debe realizar una limpieza de buffer después de que se almacena cada variable. La codificación corregida es: #include <iostream> #include <stdio.h> //librería necesaria para fflush(stdin), que se utiliza para realizar // la limpieza de buffer. using namespace std; int main() { char caracter1,caracter2; cout << "Digite la primera letra: "; caracter1=cin.get(); fflush(stdin); //función que realiza la limpieza de buffer cout << endl <<"digite la segunda letra: "; caracter2=cin.get(); cout <<endl<<"las letras son: "<<caracter1<<caracter2; return 0; } Al ejecutarlo, los procesos y resultados son correctos. U1 Página 17 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Otra alternativa para almacenar datos de tipo carácter, es utilizando cin>> El ejemplo anterior utilizando cin>> quedaría así: #include <iostream> #include <stdio.h> //librería necesaria para fflush(stdin), que se utiliza para realizar // la limpieza de buffer. using namespace std; int main() { char caracter1,caracter2; cout << "Digite la primera letra: "; cin>>caracter1; fflush(stdin); //función que realiza la limpieza de buffer cout << endl <<"digite la segunda letra: "; cin>>caracter2; cout <<endl<<"las letras son: "<<caracter1<<caracter2; return 0; } En el curso utilizaremos cin>> para almacenar datos de tipo carácter. Recuerde utilizar fflush(stdin) para la limpieza del buffer. Almacenamiento de cadenas. Si lo que va a almacenar es una cadena que no contendrá espacios se puede utilizar cin >> sin ningún inconveniente Ejemplo: #include <iostream> using namespace std; int main() { char ciudad[20]; U1 Página 18 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION cout << “Digite el nombre de una ciudad ”; cin >> ciudad; cout << endl <<”La ciudad es : “ <<ciudad; cout <<endl; return 0; } Si el usuario digitó Cali, la palabra se almacenará bien, pero si digitó Santa Marta, únicamente se almacenará Santa. Porque cin>> detiene la entrada cuando se digita un espacio en blanco. Para solucionar este inconveniente se utiliza el método getline(), cuya sintaxis es: cin.getline (arreglo, num) El primer argumento (arreglo) corresponde al nombre asignado a la cadena y el segundo (num) indica el número máximo de caracteres que puede contener el arreglo. Ejemplo: #include <iostream> using namespace std; int main() { char ciudad[20]; U1 Página 19 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION cout << “Digite el nombre de una ciudad ”; cin.getline(ciudad,20); cout << endl <<”La ciudad es : “ <<ciudad; cout <<endl; return 0; } En este caso si el usuario digita como ciudad Santa Marta, las dos palabras se almacenarán sin problema en la variable ciudad. cout << imprime en pantalla la información, sea esta una cadena de texto (se escribe entre comillas dobles) o el valor que contiene una variable. Además se puede incluir indicadores de formato que indican una tarea específica como saltar una línea o tabular. Ejemplo: #include <iostream> using namespace std; int main() { int num = 10; cout << “Programa de Ingenieria”; // imprime una cadena cout << endl <<endl; // ejecuta 2 saltos de línea cout << num; // imprime el valor que contiene la variable num cout << “\n El valor de num es “; // imprime El valor de num es 10. \n es una // alternativa para indicar un salto de línea. Además del mensaje se // indica que imprima el valor de la variable num. return 0; } U1 Página 20 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Cuando se requiere presentar en una sola línea mensajes y contenidos de diferentes variables, se debe tener en cuenta que los mensajes se escriben entre comillas dobles (“ ”) y los datos se separan con el operador de direccionamiento << Ejemplo: programa que solicita nombre y año de nacimiento, para calcular la edad. #include <iostream> using namespace std; int main() { char nombre[20]; int edad, aa; cout<< "Hola, qu\x82 tal."; // la expresión \x82 se utiliza para imprir // la letra e con tilde (é) cout<< endl <<"Por favor digite su nombre: "; // imprime una cadena cin.getline(nombre,20); // almacena el nombre digitado por el usuario cout << endl <<endl <<"Digite el a\xa4o de nacimiento: "; // ejecuta 2 saltos de línea. La expresión a\xa4o se utiliza para imprimir la letra ñ cin>> aa; //almacena el año digitado por el usuario edad=2016-aa; //calcula la edad cout<<endl<<endl<<nombre<<" tiene "<<edad <<" a\xa4os"; // imprime el nombre digitado por el usuario y la edad calculada cout <<endl<<endl; return 0; } U1 Página 21 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION En la codificación anterior, se puede observar que se utilizaron unas expresiones especiales para imprimir las letras é y ñ. Esto ocurre porque los lenguajes de programación C y C++ son americanos y utilizan el idioma inglés, en el cual no se utilizan tildes, ni sígnos de apertura de exclamación o interrogación (¡¿). Para solucionar este inconveniente en C++ se deben incluir la expresión \xnn \ indica a C++ que se va a colocar una expresión de llamado. x indica hexadecimal nn es el número en hexadecimal del carácter ASCII que se desea imprimir. A continuación se comparte la tabla de equivalencias para los caracteres especiales Carácter especial á é í ó ú Á É Í Ó Ú ñ Ñ ¿ U1 Codigo ASCCI en hexadecimal xa0 x82 xa1 xa2 xa3 xb5 x90 xd6 xe0 xe9 xa4 xa5 xa8 Expresión a incluir en el código. \xa0 \x82 \xa1 \xa2 \xa3 \xb5 \x90 \xd6 \xe0 \xe9 \xa4 \xa5 \xa8 Página 22 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Otra situación bastante común es la necesidad de presentar datos numéricos con un número fijo de decimales. En C++ se utilizan manipuladores paramétricos y se trabajan como si se llamará a una función. Para especificar el número de cifras decimales que se imprimirán en pantalla se requiere incluir en el programa la librería iomanip (permite trabajar con los manipuladores paraméticos) y los manipuladores : fixed representa la notación normal de C++ para coma flotante. setprecision(valor_entero) índica el número de cifras decimales que se imprimen Asumiendo que se tiene una variable de tipo float identificada como NOTA, la cual contiene el valor 3.7899999. Para imprimir el valor únicamente con 2 decimales, la sentencia sería: cout<< fixed <<setprecision(2) <<NOTA; Ejemplo: Calcular el promedio de los siguientes datos 45.2346, 67.982564, 100.3456790 e imprimir el resultado con 2 posiciones decimales. #include <iostream> #include <iomanip> // biblioteca para utilizar los manipuladores paramétricos // fixed y setprecision using namespace std; int main() { float n1=45.2346, n2=67.982564, n3=100.3456790, promedio; promedio=(n1+n2+n3)/3; cout<< "Promedio sin indicar cantidad de decimales : " <<promedio <<endl <<endl; cout<< "Promedio especificando cantidad de decimales : "<< fixed <<setprecision(2) <<promedio; cout <<endl<<endl; return 0; } U1 Página 23 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Otros formatos de entrada y salida son las funciones printf( ) y scanf( ) aunque estas son propias de C, también funcionan en C++ y requieren la librería stdio. U1 printf( ) es una función standar de salida de C, está disponible al incluir stdio.h tiene 2 partes: nombre de la función y sus argumentos. Ej. printf(“mi edad es %d\n”, edad). o Primer argumento: es una cadena de caracteres que puede tener caracteres y/o secuencias de escape y/o códigos de formato. Las secuencias de escape inician con \. Ej. \n secuencia de escape que indica retorno de carro (nueva línea); y los códigos de formato inician con %. Ej: %d indica que un entero se visualizará en forma decimal entera. o Segundo argumento contiene la o las variables que se van a mostrar. Los argumentos se separan mediante una coma. o El número de variables debe corresponder al número de indicadores de formato que se tienen en el primer argumento. o Ejemplo: int a = 10, b = 20, c; printf(“\nEl valor de a es %d”,a); // 1 indicador y 1 variable printf(“\nEl valor de b es %d”, b); // 1 indicador y 1 variable c= a + b; printf(“\n %d + % d = %d”, a,b,c); // 3 indicadores y 3 variables Los indicadores de formato son: %c caracter %d int %ld long int %f float %lf double %s cadena Un pequeño programa sería el siguente: #include<stdio.h> #include<conio.h> int main() { int edad = 20; Página 24 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION printf(“Mi nombre es María y tengo %d”,edad); getch(); return(0); } scanf(): la función scanf(), disponible al incluir stdio.h, permite leer datos por teclado. La función scanf se usa de un modo similar a printf(), su primer argumento es una cadena con marcas de formato. A éste le siguen una o más direcciones de memoria. Si desea leer por teclado el valor de una variable entera a, puede hacerlo así: scanf ("%d", &a); Observe que la variable cuyo valor se lee por teclado va obligatoriamente precedida por el operador &: es así como se obtiene la dirección de memoria en la que se almacena el valor de la variable. Uno de los errores más comunes es omitir el carácter & que debe preceder a todas las variables escalares en scanf . Sintaxis: scanf(“indicador_de_formato”, identificador) o Los argumentos indican los tipos de datos que se van leer y el nombre de las variables donde se van a guardar. Ej: scanf(“%d”, &pies). o A los identificadores les precede el &, salvo cuando se trata de vectores, como es el caso de las cadenas. o Para almacenar un carácter utilice cscanf( ); o Ejemplo: int a; char letra, palabra[10]; printf(“Digite un número : ”); scanf(“%d ”, &a); printf(“\n Digite una vocal : ”); cscanf(“%c”, &letra); printf(“\n Digite una palabra : ”); scanf(“%s”, palabra); En el curso trabajaremos con cin>> y cout<< porque corresponden más al lenguaje C++ Almacenar datos Cabe recalcar los datos se pueden también almacenar en las variables mediante operaciones de asignación, desde la codificación, a esto se le conoce como asignar valores. Ejemplos: int a = 30; // declaración de una variable y asignación de valor float b; // declaración de una variable b = 35.45 // asignación de un valor a la variable b U1 Página 25