Fpr Tema 4 www.fresymetal.com

1,534 views

Published on

www.fresymetal.com

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,534
On SlideShare
0
From Embeds
0
Number of Embeds
96
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Fpr Tema 4 www.fresymetal.com

  1. 1. Tema 4 E/S básica Fundamentos de Programación I.E.S. Juan de Garay
  2. 2. Tema 4: E/S básica <ul><li>Tipos de E/S. </li></ul><ul><li>E/S de caracteres. </li></ul><ul><li>E/S de cadenas de caracteres. </li></ul><ul><li>E/S formateada. </li></ul><ul><li>La función fprintf( ). </li></ul>
  3. 3. 1. Tipos de E/S <ul><li>C no contiene palabras reservadas específicas que se encarguen de la E/S. Estas operaciones se realizan mediante funciones de biblioteca que se clasifican en: </li></ul><ul><ul><ul><li>E/S de alto nivel, definida por el estándar ANSI. </li></ul></ul></ul><ul><ul><ul><li>E/S de bajo nivel, o E/S de tipo UNIX. </li></ul></ul></ul><ul><ul><ul><li>E/S por consola. </li></ul></ul></ul><ul><li>E/S por consola, son las operaciones realizadas sobre la E/S estándar del sistema, por defecto teclado y pantalla. </li></ul><ul><li>Tanto la entrada como la salida puede redireccionarse a otros dispositivos, como por ejemplo la impresora. </li></ul>
  4. 4. 2. E/S de caracteres <ul><li>Funciones getche( ) Y getch() </li></ul><ul><li>Los programas que utilizan estas funciones deben incluir el archivo de cabecera conio.h mediante una sentencia # include. </li></ul><ul><li>Ambas funciones devuelven el carácter leído del teclado (sin esperar a pulsar la tecla return). </li></ul><ul><li>La función getche( ) muestra en pantalla el carácter tecleado. La función getch( ) no lo muestra. </li></ul><ul><li>Ejemplo 1 : </li></ul><ul><li>char a; // También puede declararse como int </li></ul><ul><li>... </li></ul><ul><li>a = getche( ); // o bien a = getch( ); </li></ul>
  5. 5. 2. E/S de caracteres (Cont.) <ul><li>Estas funciones no tienen argumentos. No es obligatorio guardar en una variable el carácter leído. </li></ul><ul><li>Ejemplo 2 : </li></ul><ul><li>printf(“ Pulse una tecla para continuar ...”); </li></ul><ul><li>getch( ); </li></ul><ul><li>Ejemplo 3 : Visualizar el código ASCII de un carácter tecleado. </li></ul><ul><li># include <stdio.h> </li></ul><ul><li># include <conio.h> </li></ul><ul><li>int main( ) </li></ul><ul><li>{ </li></ul><ul><li>unsigned int caracter; </li></ul><ul><li>printf(“ Pulse una tecla:”); </li></ul><ul><li>caracter = getche( ); </li></ul><ul><li>printf(“ Su código ASCII es %u”, caracter); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  6. 6. 2. E/S de caracteres (Cont.) <ul><li>Función putchar( ) </li></ul><ul><li>Debe incluirse en el programa el archivo de cabecera stdio.h </li></ul><ul><li>Se utiliza para mostrar caracteres en pantalla. </li></ul><ul><li>Ejemplo 4 : </li></ul><ul><li>char a; // También puede declararse como int </li></ul><ul><li>... </li></ul><ul><li>putchar(a); </li></ul><ul><li>Ejemplo 5 : </li></ul><ul><li>char letra; </li></ul><ul><li>... </li></ul><ul><li>letra = 65; </li></ul><ul><li>putchar(letra); </li></ul><ul><li>Visualiza en pantalla el carácter A, cuyo código ASCII es 65. </li></ul><ul><li>Es equivalente a putchar(‘A’); </li></ul><ul><li>También es posible utilizar putchar(getch ( )); </li></ul><ul><li>Cuyo efecto es el mismo que getche ( ); </li></ul>
  7. 7. 3. E/S de cadenas de caracteres <ul><li>Una cadena de caracteres se define como un vector de caracteres terminado con el carácter nulo ‘’. Para declarar una cadena de hasta 30 caracteres se debe escribir: </li></ul><ul><li>char cadena[31]; </li></ul><ul><li>Función gets( ) </li></ul><ul><li>Es la función básica de entrada de cadenas de caracteres por teclado. Lee caracteres del teclado hasta pulsar la tecla return almacenándolos en la cadena indicada en el argumento y añadiendo el carácter nulo al final. </li></ul><ul><li>Ejemplo 6 : </li></ul><ul><li>char frase[31]; </li></ul><ul><li>... </li></ul><ul><li>gets(frase); </li></ul><ul><li>La función gets no hace comprobación del límite. </li></ul>
  8. 8. 3. E/S de cadenas de caracteres (Cont.) <ul><li>Función puts( ) </li></ul><ul><li>Escribe en pantalla la cadena de caracteres especificada en el argumento y provoca además, un salto de línea. Es más rápida que printf pero no permite formatear la salida. </li></ul><ul><li>Tanto gets( ) como puts( ) precisan la inclusión del fichero stdio.h. </li></ul><ul><li>Ejemplo 7 : </li></ul><ul><li># include <stdio.h> </li></ul><ul><li>int main( ) </li></ul><ul><li>{ </li></ul><ul><li>char frase[31]; </li></ul><ul><li>puts(“ Teclee una frase:”); </li></ul><ul><li>gets(frase); </li></ul><ul><li>printf(“ Usted ha tecleado: %s”, frase); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul><ul><li>Un efecto similar tiene la sentencia: puts(gets(frase)); </li></ul>
  9. 9. 4. E/S formateada <ul><li>La E/S con formato se realiza por medio de las funciones scanf( ) y printf( ). </li></ul><ul><li>Función printf( ) </li></ul><ul><li>Precisa la inclusión del archivo de cabecera stdio.h. </li></ul><ul><li>Su formato general es: </li></ul><ul><li>printf(cadena de control, lista de argumentos); </li></ul><ul><li>La cadena de control determina como se presentarán el resto de argumentos mediante los caracteres de formato. Por cada carácter de formato de la cadena de control debe haber un argumento en la lista. </li></ul><ul><li>Mediante los caracteres de formato pueden controlarse ciertos aspectos de la presentación de los datos, como la longitud, número de decimales y la justificación izquierda o derecha. </li></ul>
  10. 10. 4. E/S formateada (Cont.) se refieren a punteros % n % p Punteros carácter simple cadena de caracteres el carácter % % c % s % % Carácter signed decimal int unsigned octal int unsigned decimal int unsigned hexadecimal int (con a, ..., f) unsigned hexadecimal int (con A, ..., F) [-]dddd.dddd [-]d.dddd o bien e[+ / -]ddd el más corto de %e y %f [-]d.dddd o bien E[+ / -]ddd el más corto de %E y %f % d, % i % o % u % x %X % f % e % g % E % G Numérico Formato de salida Carácter de formato Tipo de argumento
  11. 11. 4. E/S formateada (Cont.) <ul><li>Para indicar la longitud de un campo incluiremos un número entero entre el signo % y el carácter de formato. Por defecto la justificación es a la derecha. </li></ul><ul><li>Ejemplo 8 : </li></ul><ul><li>printf(“ [%5d]”, 47); visualiza [ °°°47] </li></ul><ul><li>printf(“ [%4d]”, 47); visualiza [ °°47] </li></ul><ul><li>printf(“ [%3d]”, 47); visualiza [ °47] </li></ul><ul><li>Si se desea justificación a la izquierda, se indica con un signo menos. </li></ul><ul><li>Ejemplo 9 : </li></ul><ul><li>printf(“ [%-5d]”, 47); visualiza [ 47°°°] </li></ul><ul><li>printf(“ [%-4d]”, 47); visualiza [ 47°°] </li></ul><ul><li>printf(“ [%-3d]”, 47); visualiza [ 47°] </li></ul><ul><li>Puede hacerse que un valor numérico justificado a la derecha se rellene con ceros en lugar de espacios en blanco, poniendo un 0 antes del indicador de tamaño. </li></ul><ul><li>Ejemplo 10 : </li></ul><ul><li>printf(“ [%05d]”, 47); visualiza [000 47] </li></ul><ul><li>Este efecto no se produce si se solicita justificación izquierda. </li></ul>
  12. 12. 4. E/S formateada (Cont.) <ul><li>Ejemplo 11 : </li></ul><ul><li>printf(“ [%-05d]”, 47); visualiza [ 47°°°] </li></ul><ul><li>Cuando el dato sobrepasa el tamaño del campo, se imprime completo </li></ul><ul><li>printf(“ [%3d]”, 1234); visualiza [1234 ] </li></ul><ul><li>Ejemplo 12 : Aplicamos todo esto a cadenas de caracteres. </li></ul><ul><li>printf(“ [%5s]”, “ABC”); visualiza [ °°ABC] </li></ul><ul><li>printf(“ [%05s]”, “ABC”); visualiza [ °°ABC] </li></ul><ul><li>printf(“ [%-5s]”, “ABC”); visualiza [ ABC°°] </li></ul><ul><li>printf(“ [%-05s]”, “ABC”); visualiza [ ABC°°] </li></ul><ul><li>printf(“ [%5s]”, “ABCDEF”); visualiza [ ABCDEF] </li></ul><ul><li>Ejemplo 13 : Aplicamos todo esto a caracteres simples. </li></ul><ul><li>printf(“ [%3c]”, ‘A’); visualiza [ °°A] </li></ul><ul><li>printf(“ [%-3c]”, ‘A’); visualiza [ A°°] </li></ul>
  13. 13. 4. E/S formateada (Cont.) <ul><li>Para dar formato a un número con parte decimal se utiliza el código de formato: %m.nf </li></ul><ul><li>Donde m es la longitud total del campo (incluyendo el punto) y n el número de decimales. </li></ul><ul><li>Ejemplo 14 : </li></ul><ul><li>printf(“ [%7.2f]”, 12.3); visualiza [ °°12.30] </li></ul><ul><li>printf(“ [%07.2f]”, 12.3); visualiza [ 0012.30] </li></ul><ul><li>printf(“ [%-7.2f]”, 12.3); visualiza [ 12.30°°] </li></ul><ul><li>Si el número de decimales es mayor que n, se redondea la última cifra. </li></ul><ul><li>Ejemplo 15 : </li></ul><ul><li>printf(“ [%7.2f]”, 12.348); visualiza [ °°12.35] </li></ul><ul><li>printf(“ [%7.2f]”, 12.342); visualiza [ °°12.34] </li></ul><ul><li>Si este formato se aplica a cadenas de caracteres o números enteros, n especifica el tamaño máximo del campo. Así, %3.5s se utiliza para una cadena de al menos 3 caracteres y no más de 5. Si la cadena sobrepasa el tamaño máximo se trunca. </li></ul>
  14. 14. 4. E/S formateada (Cont.) <ul><li>Ejemplo 16 : </li></ul><ul><li>printf(“ [%3.5s]”, “ABC”); visualiza [ABC ] </li></ul><ul><li>printf(“ [%-3.5s]”, “ABC”); visualiza [ABC ] </li></ul><ul><li>printf(“ [%3.5s]”, “ABCDEFG”); visualiza [ABCDE ] </li></ul><ul><li>printf(“ [%3.5s]”, “AB”); visualiza [ ° AB ] </li></ul><ul><li>printf(“ [%5.3s]”, “ABCDE”); visualiza [ °° ABC ] </li></ul><ul><li>Pueden utilizarse modificadores de formato para visualizar enteros short y long , poniendo, respectivamente, h y l antes de d, u, o, x, X . </li></ul><ul><li>%hd para variables short int </li></ul><ul><li>%ld para variables long int </li></ul><ul><li>%hu para variables unsigned short int </li></ul><ul><li>%lu para variables unsigned long int </li></ul><ul><li>El modificador l también se puede aplicar a e, f, g, E, G . </li></ul><ul><li>%lf para visualizar variables double </li></ul><ul><li>%Lf para visualizar variables long double </li></ul>
  15. 15. 4. E/S formateada (Cont.) <ul><li>Función scanf( ) </li></ul><ul><li>Función de entrada de datos cuya sintaxis es: </li></ul><ul><li>scanf(cadena de control, lista de argumentos); </li></ul><ul><li>Aquí la cadena de control no debe interpretarse igual que en printf( ). </li></ul><ul><li>Clasificaremos los caracteres que pueden aparecer en la cadena de control en </li></ul><ul><ul><ul><li>Especificadores de formato </li></ul></ul></ul><ul><ul><ul><li>Caracteres blancos </li></ul></ul></ul><ul><ul><ul><li>Caracteres no blancos </li></ul></ul></ul><ul><ul><ul><li>Carácter * </li></ul></ul></ul><ul><ul><ul><li>Modificadores de longitud </li></ul></ul></ul><ul><ul><ul><li>Juego de inspección </li></ul></ul></ul><ul><li>Especificadores de formato : Son los mismos que en printf( ). </li></ul><ul><li>Ejemplo 17 : </li></ul><ul><li>char a; // También se puede declarar como int </li></ul><ul><li>... </li></ul><ul><li>scanf(“ %c ”, &a); </li></ul>
  16. 16. 4. E/S formateada (Cont.) <ul><li>El operador & no es necesario cuando el dato a capturar es una cadena de caracteres. </li></ul><ul><li>Ejemplo 18 : </li></ul><ul><li>char cadena[80]; // También se puede declarar como int </li></ul><ul><li>... </li></ul><ul><li>scanf(“%s”, cadena); </li></ul><ul><li>Caracteres blancos : Son separadores de datos de entrada. Son: </li></ul><ul><ul><ul><li>Espacio(s) en blanco </li></ul></ul></ul><ul><ul><ul><li>Tabulador(es) </li></ul></ul></ul><ul><ul><ul><li>Return, Intro o salto de línea </li></ul></ul></ul><ul><li>Cuando se especifica un carácter blanco en la cadena de control, scanf( ) lee, pero no guarda, cualquier número de caracteres blancos hasta que encuentre el primero que no lo sea. </li></ul><ul><li>Ejemplo 19 : </li></ul><ul><li>scanf(“%c %d %s”, &a, &b, c); </li></ul><ul><li>Almacena en a, b y c, respectivamente, datos introducidos: </li></ul><ul><li>Y  Y <TAB> 19  Y 19 Hola  </li></ul><ul><li>19  Hola  </li></ul><ul><li>Hola  </li></ul>
  17. 17. 4. E/S formateada (Cont.) <ul><li>Una sentencia como scanf(“%s ”, cadena); </li></ul><ul><li>no volverá hasta que no se teclee un carácter no blanco. El espacio que hay después de %s hace que se lean y descarten espacios, tabuladores y saltos de línea. </li></ul><ul><li>Caracteres no blancos : Se toman como separadores de los datos de entrada. </li></ul><ul><li>Ejemplo 20 : </li></ul><ul><li>scanf(“%dHOLA%c”, &num, &car); </li></ul><ul><li>Es necesario teclear los caracteres HOLA aunque se descartan. </li></ul><ul><li>HAY QUE LLEVAR CUIDADO DE NO UTILIZAR LA CADENA DE CONTROL scanf( ) COMO EN printf( ), y NO ESCRIBIR: scanf(“Teclee un número: %d”, &num); </li></ul><ul><li>Carácter * : cuando se coloca un * entre el % y el carácter de formato, se lee el tipo de dato especificado pero no se asigna a ninguna variable. </li></ul><ul><li>Ejemplo 21 : </li></ul><ul><li>scanf(“%d %*c %d”, &num1, &num2); </li></ul><ul><li>Modificadores de longitud : Es posible limitar el número de caracteres que se admiten en un campo escribiendo un número después del símbolo %. </li></ul><ul><li>Ejemplo 22 : </li></ul><ul><li>scanf(“%5s”, frase); </li></ul><ul><li>sólo almacena en frase los 5 primeros caracteres. El resto de caracteres no se descartan, sino que quedan en el búffer del teclado disponibles para ser leídos por otra sentencia scanf( ). </li></ul>
  18. 18. 4. E/S formateada (Cont.) <ul><li>Ejemplo 23 : </li></ul><ul><li># include <stdio.h> </li></ul><ul><li>int main( ) </li></ul><ul><li>{ </li></ul><ul><li>long int n1, n2; </li></ul><ul><li>printf(“ Teclee 2 números enteros: ”); </li></ul><ul><li>scanf(“%5ld %5ld”, &n1, &n2); </li></ul><ul><li>printf(“ Los números tecleados son %ld y %ld”, n1, n2); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul><ul><li>Si en este se introducen los datos 123456  </li></ul><ul><li>Se muestra en pantalla Los números tecleados son 12345 y 6 </li></ul><ul><li>Juego de inspección : Se utiliza sólo con %s y permite especificar qué caracteres se aceptarán. Se indican entre corchetes. </li></ul><ul><li>Ejemplo 24 : </li></ul><ul><li>char frase[30]; </li></ul><ul><li>... </li></ul><ul><li>scanf(“%[abc]s”, frase); </li></ul><ul><li>Cuando se teclea un carácter que no está en el juego de inspección finaliza la entrada para esa variable, pero la sentencia continua admitiendo caracteres hasta que se teclee  . </li></ul>
  19. 19. 4. E/S formateada (Cont.) <ul><li>Ejemplo 25 : </li></ul><ul><li>scanf(“%[abc]s”, frase); </li></ul><ul><li>scanf(“%s”, cadena); </li></ul><ul><li>y se teclea: abcbbapabcfgts  </li></ul><ul><li>en frase se almacenará: abcbba </li></ul><ul><li>en cadena se almacenará: abcfgts </li></ul><ul><li>el carácter p , primero diferente de [abc], actúa como finalizador de entrada para la variable frase . </li></ul><ul><li>Pueden utilizarse rangos: scanf(“%[a-z]s”, frase); </li></ul><ul><li>scanf(“%[0-9p-t]s”, frase); admite cualquier dígito numérico y los caracteres pqrst </li></ul><ul><li>Pueden usarse juegos inversos de inspección mediante el carácter ^. Éste indica a scanf( ) que debe aceptar cualquier carácter que NO esté en el juego de inspección. </li></ul><ul><li>Ejemplo 26 : </li></ul><ul><li>scanf(“%[^0-9]s”, frase); </li></ul><ul><li>finaliza la entrada al teclear un dígito numérico. </li></ul>
  20. 20. 5. La función fprintf( ) <ul><li>Es muy similar a printf, pero permite asociar la salida a diferentes dispositivos (pantalla, impresora, archivo de texto u otro). La sintaxis es: </li></ul><ul><li>fprintf(dispositivo, cadena de control, lista de argumentos); </li></ul><ul><li>El primer argumento relaciona la salida con un dispositivo. </li></ul><ul><li>Para direccionar la salida a la impresora escribiremos: </li></ul><ul><li>fprintf(stdprn, cadena de control, lista de argumentos); </li></ul><ul><li>Todas las demás características de fprintf( ) son idénticas a las de printf( ) </li></ul>

×