Fpr Tema 4

20
Tema 4 E/S básica Fundamentos de Programación I.E.S. Juan de Garay

description

www.fresymetal.com

Transcript of Fpr Tema 4

Page 1: Fpr Tema 4

Tema 4E/S básica

Fundamentos de Programación

I.E.S. Juan de Garay

Page 2: Fpr Tema 4

Tema 4: E/S básica

1. Tipos de E/S.

2. E/S de caracteres.

3. E/S de cadenas de caracteres.

4. E/S formateada.

5. La función fprintf( ).

Page 3: Fpr Tema 4

1. Tipos de E/S

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:

E/S de alto nivel, definida por el estándar ANSI. E/S de bajo nivel, o E/S de tipo UNIX. E/S por consola.

E/S por consola, son las operaciones realizadas sobre la E/S estándar del sistema, por defecto teclado y pantalla.

Tanto la entrada como la salida puede redireccionarse a otros dispositivos, como por ejemplo la impresora.

Page 4: Fpr Tema 4

2. E/S de caracteres

Funciones getche( ) Y getch() Los programas que utilizan estas funciones deben

incluir el archivo de cabecera conio.h mediante una sentencia # include.

Ambas funciones devuelven el carácter leído del teclado (sin esperar a pulsar la tecla return).

La función getche( ) muestra en pantalla el carácter tecleado. La función getch( ) no lo muestra.

Ejemplo 1:char a; // También puede declararse como int...a = getche( );// o bien a = getch( );

Page 5: Fpr Tema 4

2. E/S de caracteres (Cont.)

Estas funciones no tienen argumentos. No es obligatorio guardar en una variable el carácter leído.

Ejemplo 2:printf(“\nPulse una tecla para continuar ...”);getch( );

Ejemplo 3: Visualizar el código ASCII de un carácter tecleado.# include <stdio.h># include <conio.h>int main( ){

unsigned int caracter;printf(“\nPulse una tecla:”);caracter = getche( );printf(“\nSu código ASCII es %u”, caracter);return 0;

}

Page 6: Fpr Tema 4

2. E/S de caracteres (Cont.)

Función putchar( ) Debe incluirse en el programa el archivo de cabecera stdio.h Se utiliza para mostrar caracteres en pantalla. Ejemplo 4:

char a; // También puede declararse como int...putchar(a);

Ejemplo 5:char letra;...letra = 65;putchar(letra);

Visualiza en pantalla el carácter A, cuyo código ASCII es 65.Es equivalente a putchar(‘A’);También es posible utilizar putchar(getch ( ));Cuyo efecto es el mismo que getche ( );

Page 7: Fpr Tema 4

3. E/S de cadenas de caracteres

Una cadena de caracteres se define como un vector de caracteres terminado con el carácter nulo ‘\0’. Para declarar una cadena de hasta 30 caracteres se debe escribir:char cadena[31];

Función gets( ) 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.

Ejemplo 6:char frase[31];...gets(frase);

La función gets no hace comprobación del límite.

Page 8: Fpr Tema 4

3. E/S de cadenas de caracteres (Cont.)

Función puts( ) 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.

Tanto gets( ) como puts( ) precisan la inclusión del fichero stdio.h. Ejemplo 7:

# include <stdio.h>int main( ){

char frase[31];

puts(“\nTeclee una frase:”);gets(frase);printf(“\nUsted ha tecleado: %s”, frase);return 0;

}

Un efecto similar tiene la sentencia: puts(gets(frase));

Page 9: Fpr Tema 4

4. E/S formateada

La E/S con formato se realiza por medio de las funciones scanf( ) y printf( ).

Función printf( ) Precisa la inclusión del archivo de cabecera stdio.h.

Su formato general es:printf(cadena de control, lista de argumentos);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.

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.

Page 10: Fpr Tema 4

4. E/S formateada (Cont.)

Tipo de argumento

Carácter de formato Formato de salida

Numérico % d, % i

% o

% u

% x

%X

% f

% e

% g

% E

% G

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

Carácter % c

% s

% %

carácter simple

cadena de caracteres

el carácter %

Punteros % n

% p

se refieren a punteros

Page 11: Fpr Tema 4

4. E/S formateada (Cont.)

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.

Ejemplo 8:printf(“\n[%5d]”, 47); visualiza [°°°47]printf(“\n[%4d]”, 47); visualiza [°°47]printf(“\n[%3d]”, 47); visualiza [°47]

Si se desea justificación a la izquierda, se indica con un signo menos. Ejemplo 9:

printf(“\n[%-5d]”, 47); visualiza [47°°°]printf(“\n[%-4d]”, 47); visualiza [47°°]printf(“\n[%-3d]”, 47); visualiza [47°]

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.

Ejemplo 10:printf(“\n[%05d]”, 47); visualiza [00047]

Este efecto no se produce si se solicita justificación izquierda.

Page 12: Fpr Tema 4

4. E/S formateada (Cont.)

Ejemplo 11:printf(“\n[%-05d]”, 47); visualiza [47°°°]

Cuando el dato sobrepasa el tamaño del campo, se imprime completoprintf(“\n[%3d]”, 1234); visualiza [1234]

Ejemplo 12: Aplicamos todo esto a cadenas de caracteres.printf(“\n[%5s]”, “ABC”); visualiza [°°ABC]printf(“\n[%05s]”, “ABC”); visualiza [°°ABC]printf(“\n[%-5s]”, “ABC”); visualiza [ABC°°]printf(“\n[%-05s]”, “ABC”); visualiza [ABC°°]printf(“\n[%5s]”, “ABCDEF”); visualiza [ABCDEF]

Ejemplo 13: Aplicamos todo esto a caracteres simples.printf(“\n[%3c]”, ‘A’); visualiza [°°A]printf(“\n[%-3c]”, ‘A’); visualiza [A°°]

Page 13: Fpr Tema 4

4. E/S formateada (Cont.)

Para dar formato a un número con parte decimal se utiliza el código de formato: %m.nfDonde m es la longitud total del campo (incluyendo el punto) y n el número de decimales.

Ejemplo 14:printf(“\n[%7.2f]”, 12.3); visualiza [°°12.30]printf(“\n[%07.2f]”, 12.3); visualiza [0012.30]printf(“\n[%-7.2f]”, 12.3); visualiza [12.30°°]

Si el número de decimales es mayor que n, se redondea la última cifra. Ejemplo 15:

printf(“\n[%7.2f]”, 12.348); visualiza [°°12.35]printf(“\n[%7.2f]”, 12.342); visualiza [°°12.34]

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.

Page 14: Fpr Tema 4

4. E/S formateada (Cont.)

Ejemplo 16:printf(“\n[%3.5s]”, “ABC”); visualiza [ABC]printf(“\n[%-3.5s]”, “ABC”); visualiza [ABC]printf(“\n[%3.5s]”, “ABCDEFG”); visualiza [ABCDE]printf(“\n[%3.5s]”, “AB”); visualiza [°AB]printf(“\n[%5.3s]”, “ABCDE”); visualiza [°°ABC]

Pueden utilizarse modificadores de formato para visualizar enteros short y long, poniendo, respectivamente, h y l antes de d, u, o, x, X.%hd para variables short int%ld para variables long int%hu para variables unsigned short int%lu para variables unsigned long int

El modificador l también se puede aplicar a e, f, g, E, G.%lf para visualizar variables double%Lf para visualizar variables long double

Page 15: Fpr Tema 4

4. E/S formateada (Cont.)

Función scanf( ) Función de entrada de datos cuya sintaxis es:

scanf(cadena de control, lista de argumentos); Aquí la cadena de control no debe interpretarse igual que en printf( ). Clasificaremos los caracteres que pueden aparecer en la cadena de

control en Especificadores de formato Caracteres blancos Caracteres no blancos Carácter * Modificadores de longitud Juego de inspección

Especificadores de formato: Son los mismos que en printf( ). Ejemplo 17:

char a; // También se puede declarar como int...scanf(“%c”, &a);

Page 16: Fpr Tema 4

4. E/S formateada (Cont.)

El operador & no es necesario cuando el dato a capturar es una cadena de caracteres. Ejemplo 18:

char cadena[80]; // También se puede declarar como int...scanf(“%s”, cadena);

Caracteres blancos: Son separadores de datos de entrada. Son: Espacio(s) en blanco Tabulador(es) Return, Intro o salto de línea

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.

Ejemplo 19:scanf(“%c %d %s”, &a, &b, c);Almacena en a, b y c, respectivamente, datos introducidos:Y Y <TAB> 19 Y 19 Hola 19 Hola Hola

Page 17: Fpr Tema 4

4. E/S formateada (Cont.)

Una sentencia como scanf(“%s ”, cadena);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.

Caracteres no blancos: Se toman como separadores de los datos de entrada. Ejemplo 20:

scanf(“%dHOLA%c”, &num, &car);Es necesario teclear los caracteres HOLA aunque se descartan.

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);

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.

Ejemplo 21:scanf(“%d %*c %d”, &num1, &num2);

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 %.

Ejemplo 22:scanf(“%5s”, frase);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( ).

Page 18: Fpr Tema 4

4. E/S formateada (Cont.)

Ejemplo 23:# include <stdio.h>int main( ){

long int n1, n2;printf(“\nTeclee 2 números enteros: ”);scanf(“%5ld %5ld”, &n1, &n2);printf(“\nLos números tecleados son %ld y %ld”, n1, n2);return 0;

}Si en este se introducen los datos 123456 Se muestra en pantalla Los números tecleados son 12345 y 6

Juego de inspección: Se utiliza sólo con %s y permite especificar qué caracteres se aceptarán. Se indican entre corchetes.

Ejemplo 24:char frase[30];...scanf(“%[abc]s”, frase);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 .

Page 19: Fpr Tema 4

4. E/S formateada (Cont.)

Ejemplo 25:scanf(“%[abc]s”, frase);scanf(“%s”, cadena);y se teclea: abcbbapabcfgts en frase se almacenará: abcbbaen cadena se almacenará:abcfgtsel carácter p, primero diferente de [abc], actúa como finalizador de entrada para la variable frase.

Pueden utilizarse rangos: scanf(“%[a-z]s”, frase);scanf(“%[0-9p-t]s”, frase); admite cualquier dígito numérico y los caracteres pqrst

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.

Ejemplo 26:scanf(“%[^0-9]s”, frase);finaliza la entrada al teclear un dígito numérico.

Page 20: Fpr Tema 4

5. La función fprintf( )

Es muy similar a printf, pero permite asociar la salida a diferentes dispositivos (pantalla, impresora, archivo de texto u otro). La sintaxis es:fprintf(dispositivo, cadena de control, lista de argumentos);

El primer argumento relaciona la salida con un dispositivo.

Para direccionar la salida a la impresora escribiremos:fprintf(stdprn, cadena de control, lista de argumentos);

Todas las demás características de fprintf( ) son idénticas a las de printf( )