INPUT Y OUTPUT (ENTRADA Y SALIDA)

FLUJOS STANDARD

Se entiende por flujo una corriente de datos hacia cualquier aparato periférico o hacia la memoria.
Siempre que se ejecuta un programa se abren automaticamente cinco flujos que son:

 

Flujo

Función

stdin

input standard (teclado)

stdout

output standard (pantalla)

sterr

output di error (pantalla)

stdprn

output impresora

stdaux

output puerta auxiliar (Serie)

LECTURA DE UN STRING DESDE EL TECLADO gets

La función gets() lee un string de la entrada standard stdin que es normalmente el teclado.

En caso de error la función gets() retorna NULL. En caso contrario retorna un puntero a la variable s.

VISUALIZACION DE UN STRING puts

La función puts() envia un string a la salida standard stdout que es normalmente la pantalla.

En caso de error la función retorna el valor EOF (-1). En caso contrario retorna un valor diverso de cero.

LECTURA DE UN CARACTER DE LA ENTRADA ESTANDARD getchar

La función getchar() lee un carácter de la entrada standard stdin.Si dicha entrada standard es el teclado (caso normal) la función espera hasta un retorno del carro (Carriage Return).

VISUALIZACION DE UN CARACTER putchar

La función putchar() Envia un carácter a la salida standard stdout que es normalmente la pantalla.

LECTRURA DE UN CARACTER DESDE TECLADO getch; getche;

Las funciones getch() e getche() leen un carácter del teclado sin esperar un retorno del carro. La diferencia entre ambas es que la segunda visualiza el carácter leído.

 
  • #include <stdio.h>
    #include <conio.h>
    main()
    {

  • int c, extended=0;
    puts("Aprieta una tecla para continuar...");
    c=getch();
    if(!c)extended=getch();
    if (extended)printf("\nExtended caracter");
    else printf("\nCaracter normal);
    }
 

LA FUNCION fprintf

Ejecuta la salida de datos a un flujo(stream).

FILE *fp es una variable de tipo stream;

LA FUNCION printf()

Ejecuta la salida de datos al flujo stdout (pantalla).

String de control

El string de control está compuesto de dos tipos de objetos: Caracteres que son visualizados en la pantalla y comandos de formatos que definen el modo en que deben de ser visualizados los argumentos. Un comando de formato está constituido del signo de tanto por ciento % seguido del código de formato. La sintaxis es como sigue:

  • %[flags][width][.prec][F|N|h|l|L]car_tipo

car_tipo

Los caracteres que indican el tipo de argumento (variable o constante) que se visualiza son:

: car_tipo

carattere

Formato

c

Carácter único

d

Decimal entero con signo

i

Decimal entero con signo

o

Octal entero sin signo

u

Decimal entero sin signo

x

Hexadecimal entero sin signo con a,b,c,d,e,f

X

Hexadecimal entero sin signo con A,B,C,D,E,F

f

Coma flotante formato [-]dddd.ddd

e

Coma flotante notación científica formato e[+/-]ddd

g

Coma flotante con formato e o f (depende precisión)

E

Coma flotante como e con exponente E

G

Coma flotante como g con exponente E

s

puntero a un string (escribe caracteres hasta que encuentra el carácter `\0'

n

puntero a un entero donde se almacena el número de caracteres escritos hasta el momento

p

Visualiza la dirección almacenada en un puntero

F,N,h,l,L

 

:flags

Carácter

Función

F

Puntero lejano (far pointer)

N

puntero próximo (near pointer)

h

Short int

l

Long

L

Long double

 

Precisión (.prec)

Indica el número de lugares decimales después de la coma.

width

Expresa el largo mínimo de la salida:

:width

Carácter

Función

<n>

Como mínimo son visualizados n caracteres

<0n>

Como mínimo son visualizados n caracteres. Si el valor del argumento tiene más de n caracteres los restantes espacios se rellenan con ceros.

flags

Los caracteres flags indican la posición de la salida y el signo.

:flags

Carácter

Función

-

Posición a la izquierda (por defecto derecha)

+

Especificación del signo (formato [+\-])

 

 
  •  
  •  

    FUNCION

    Salida

    printf("\n<%7s>","12345");

    < 12345>

    printf("\n<%-7s>","12345");

    <12345 >

    printf("\n<%7d>", 12345);

    < 12345>

    printf("\n<%+7d>",12345);

    < +12345>

    printf("\n<%+7d>",-12345);

    < -12345>

    printf("\n<%-10s>",-12345);

    <-12345 >

    printf("\n<%7.2f>",1.2345);

    < 1.23>

    printf("\n<%e>",123.45);

    <1.234500e+01>

    printf("\n<%2.2e>",123.45);

    <12.34e+01>

    printf("\n<%10.2e>",123.45);

    < 1.23e+01>

LA FUNCION sprintf()

Almacena el string formateado en un vector de tipo char.

El resultado del formato con el string de control se almacena en la dirección donde apunta str y no se visualiza en pantalla.

 
  • #include <stdio.h>
    #include <math.h>
    void main()
    {

  • char str[20];/* str es un puntero a un espacio de memoria de 20 bytes*/
    double r=0.78;
    sprintf(str," el seno de %5.2f è %5.2f",r,sin(r));
    }
 

LA FUNCION fscanf()

Ejecuta la entrada de un flujo de datos(stream).

FILE *fp es una variable de tipo stream y &var representa la dirección de una variable (puntero);

LA FUNCION scanf()

Scanf() representa la rutina genérica de entrada del teclado (stdin);

FILE *fp es una variable de tipo stream y &var representa la dirección de una variable (puntero);

String de control

El string de control está formado por tres clases de caracteres:

  • - Especificadores de formato
    - White-space character (carácter de espacio)
    - Nonwhite-space character (todos los demás carácteres)

Los especificadores de formato de entrada van precedidos del carácter % e informan a scanf() del tipo de datos que se quieren leer. Por ejemplo %s lee un string mientras %d lee un entero
Una estrella * posicionada después de % antes del código de formato lee datos del tipo especificado pero elimina su asignación a una variable. Por ejemplo

  • scanf("%d%*c%d",&x&y);

con entrada 10/20 posiciona en x el valor 10, ignora el signo de la división y asigna a y el valor 20
Un carácter de espacio en el string de control induce a scanf() a ignorar cualquier espacio antes del primer carácter nonwhite-space. Por white-space se entiende espacios tabuladores y nuevas líneas.
Un carácter de nonwhite-space indica a scanf() que lea e ignore el carácter correspondiente. Por ejemplo "%d,%d", señala a scanf() la lectura de un entero, una coma que tiene que ignorar y un segundo entero.
Los comandos de formato pueden incluir un modificador para especificar la anchura máxima del campo.

  • scanf("%20s",str);

lee un máximo de 20 caracteres en str.
La función scanf() preve también la posibilidad de especificar un conjunto de caracteres a admitir, el llamado scanset. La función scanf() continua leyendo caracteres hasta encontrar uno que no pertenezca al conjunto en cuyo caso pasa al campo siguiente. Un conjunto scanset se define insertando la lista de caracteres admitidos entre paréntesis cuadrados. El de apertura va precedido del signo de tanto por ciento %.

  • scanf("%[123456789]",st);

En el ejemplo scanset indica a scanf() que lea solo las cifras comprendidas entre 0 y 9.
En un scanset es posible especificar el intervalo con un guión [-].

  • scanf("%[A-Z]",s);

acepta caracteres de la A a la Z.

 

Especificadores de formato

El string de control tiene especificadores de formato que van precedidos del carácter % e informan a scanf() del tipo de datos que se deben leer.
Los especificadores de formato son una combinación de los códigos de formato y de los modificadores de formato.

Códigos de formato

 

: car_tipo

Carácter

Formato

c

carácter único

d

Decimal entero con signo

i

Decimal entero con signo

o

Octal entero sin signo

u

Decimal entero sin signo

x

Hexadecimal entero sin signo

f

Coma flotante con signo; formato [-]dddd.ddd

e

Coma flotante notación científica formato e[+/]ddd

s

puntero a un string o vector de caracteres

n

puntero a un entero donde se almacenan los caracteres leídos hasta el momento.

p

Entrada a un puntero

Modificadores de formato h,l,L

 

:flags

Carácter

Función

h

Short int

l

Long integer, double

L

Long double

 
  • #include <stdio.h>
    void main()
    {

  • int c; double r;
    scanf("%ld%d",&r&c); /* lee dos variables r y c */
    }
 

En el ejemplo anterior la entrada de datos desde el teclado debe de ir separada de uno o más espacios.

 

: Ejemplos

Función

Input

Almacena

scanf("%c");

129-E2

`1'

scanf("%o%d%x",&i,&j,&k)

129-E2

10, 9, 4

scanf("%e",&f)

129-E2

1.29

scanf("12%n",&i)

129-E2

2

scanf("%p",&prt)

129-E2

0x129

scanf("%s",str)

129-E2

129E-2

scanf("%[54321]",str)

129-E2

12

scanf("%% %i")

% 0XA

10

LA FUNCION flushall()

flushall() vacía el buffer de todos los streams.
El buffer de un stream es un espacio de memoria destinado a almacenar temporalmente datos en las operaciones de entrada y de salida. En dichas operaciones el mencionado buffer sólo se vacía cuando está lleno o cuando ciertas funciones de entrada y salida lo requieren. Ocurre no obstante que en determinados casos de be de ser vacíado para el correcto funcionamiento de algunas operaciones. En estos casos se debe llamar a la función flushall().

 
  • #inlude <stdio.h>
    void main()
    {

  • int c;
    char str[20];
    c=0;
    while(c!='q')
    {

  • printf("\n introduce una palabra ");
    scanf(%19s,str);
    printf("\n la palabra introducida es %s",str);
    printf("\n aprieta una tecla (para acabar `q')");
    flushall();
    c=getch();
    }
  • }