Comandos del Lenguaje C.


Funciones básicas de Entrada y Salida por consola.


La E/S por consola se refiere a todas las operaciones que se producen en el teclado y la pantalla de la computadora.


A continuación comentaremos algunas funciones básicas de entrada y salida. Los prototipos de las que forman parte del estándar ANSI C se encuentran dentro de la librería stdio.h.


printf: Definida dentro de ANSI C.


El prototipo de printf es: int printf(const char *formato, listaDeArgumentos);


Como verán, printf devuelve un número entero. Este representa el número de caracteres escritos. Cualquier número negativo indica que ocurrió un error.


Esta función escribe en el flujo estándar de salida stdout ( o sea, por pantalla ) los argumentos que componen “listaDeArgumentos” según las especificaciones dadas por la cadena apuntada por “formato”. La cadena “formato”, puede contener tanto letras como códigos que describen la forma en que se muestran los argumentos. Existen varios códigos, pero a continuación sólo les comentaré los más usados:


%c Se usa para imprimir un caracter

%i Se usa para imprimir un entero en decimal con signo.

%d Se usa para imprimir un entero en decimal con signo.

%f Se usa para imprimir un número en coma flotante ( real ).

%x Se usa para imprimir números hexadecimales.

%o Se usa para imprimir números en Octal.

%s Se usa para imprimir una cadena de caracteres.

%e Se usa para imprimir un número en notación científica.


Para su información, existen modificadores que pueden especificar con mas detalle de que forma se quiere que se muestren los datos con la finalidad de poder ordenarlos. Esto quiere decir que se puede modificar el código ( colocando los modificadores entre el signo % y el caracter de formato ) para que muestre por ejemplo una determinada longitud del campo, cuantas posiciones decimales se mostrarán o un indicador de ajuste a la izquierda. Por ejemplo, %-10.2f ajusta un número en coma flotante por la izquierda con dos posiciones decimales en un campo de diez caracteres. No profundizaremos en este punto.


Ejemplos:


printf(“Hola”); // Imprime la palabra Hola por pantalla ( sin las comillas ).


printf(“Hola\n”); // Igual al anterior pero imprime imprime el retorno de carro- Nueva línea


i = 10;

printf(“Número entero %i \n”, i); // Imprime “Numero entero 10”

c = 'x';

printf(“Caracter %c y número %i\n”, c, i); // Imprime “Caracter x y número 10”



Nuestro Primer programa: El clásico Hola Mundo.


#include<stdio.h>


int main(void) {

printf(“Hola Mundo!\n”);

return 0;

}


Al compilar y ejecutar este programa, lo que hará es imprimir la frase “Hola Mundo!” por pantalla ( sin las comillas ).


getchar: Es la función de entrada definida por el ANSI C. Esta función se encarga de obtener un caracter desde el teclado. El problema de esta función es que guarda en un buffer la entrada hasta que se presiona la tecla ENTER ( y al hacerlo, ella tomará sólo el primer caracter del buffer ). La razón de ésto es que los sistemas UNIX originales usaban un buffer de línea para entrada por terminal ( lo que quiere decir que había que introducir un retorno de carro para que lo que se hubiese escrito fuese efectivamente enviado al computador ). Esta función está en desuso debido a que los programas modernos requieren cierto grado de interactividad y el hecho de tener que esperar a enviar un ENTER para procesar suele ser desconcertante. Aún así, siempre es incluida en los compiladores por razones de portabilidad. Existe una función no ANSI mas conveniente a la hora de esperar un caracter por teclado que está incluida en la librería de Turbo C conio.h que veremos más adelante.


El prototipo del getchar() es: int getchar(void);


Un ejemplo de su uso:


char ch;

ch = getchar();


getche: No es ANSI C sino que está definida dentro de una librería de Borland ( quien desarrollo Turbo C, Turbo C++ y Borland C++) llamada conio.h. Espera a que el usuario presione una tecla por teclado y esta función lee el caracter presionado sin necesidad de esperar el ENTER y el “eco” de la misma es presentado por pantalla.


El prototipo del getche() es: int getche(void);


Un ejemplo de su uso:


char ch;

ch = getche(); // Asigna a ch el caracter presionado por teclado y lo muestra por pantalla.


getch: No es ANSI C sino que está definida dentro de una librería conio.h. Espera a que el usuario presione una tecla por teclado y esta función lee el caracter presionado sin necesidad de esperar el ENTER pero a diferencia del getche(), ésta no muestra el “eco” por pantalla.


El prototipo del getch() es: int getch(void);


Un ejemplo de su uso:


char ch;

ch = getch(); // Asigna a ch el caracter presionado por teclado. No muestra nada por pantalla.


putchar: Definida dentro de ANSI C. Imprime un caracter en pantalla en la posición actual del cursor


El prototipo de putchar es: int putchar(int c);


donde c es el caracter a imprimir. Esta función devuelve un parámetro ya que el programador podría necesitar verificar que la función haya sido ejecutada con éxito. Si es cierto, devuelve el mismo caracter c, de lo contrario devolverá un EOF ( Una macro definida en stdio.h que significa End Of File. Lo veremos más adelante en el curso ).


Un ejemplo de su uso:


char ch;

ch = 'S';

putchar(ch); // Lo que imprime el caracter 'S' por pantalla.


scanf: Definida dentro de ANSI C.


El prototipo de scanf es: int scanf(const char *formato, listaDeArgumentos);


Es la función encargada de leer datos desde el buffer estándar de entrada stdin ( teclado ). Puede leer todos los tipos de datos que hayan. Es la función inversa de printf();


Los códigos para representar los datos son los mismos que en printf. Por ejemplo:


scanf(“%i”, &i); // OJO con el signo '&'


especifica que se espera del buffer estándar un número entero y éste será almacenado dentro de la variable i. En realidad el símbolo '&' podría traducirse como: “en la dirección de memoria que contiene la variable 'i'”. Sobre esto profundizaremos en punteros. Lo que se está diciendo que se almacene el valor dentro de una localidad de memoria. Este signo NO puede faltar a menos que hablemos de cadenas y esto tiene su explicación que lo veremos cuando estudiemos Cadenas más adelante.


Otra cosa es que una sólo orden puede ser usada para recibir varios datos al mismo tiempo. Por ejemplo:



scanf(“%i%c”, &i, &ch);



espera a que el usuario introduzca algo como “10 a” y luego ENTER por teclado para almacenar 10 en i y la letra a en ch.


Otras funciones básicas.


textcolor: Definida dentro de conio.h. Esta función cambia el color de las letras que se muestran por pantalla.


Su prototipo es: void textcolor(int color);


Donde color es un número que representa el color deseado. Tambien existen unas MACROS definidas dentro de conio.h que representan el color. Estos son:


Macro Equivalente entero

BLACK 0

BLUE 1

GREEN 2

CYAN 3

RED 4

MAGENTA 5

BROWN 6

LIGHTGRAY 7

DARKGRAY 8

LIGHTBLUE 9

LIGHTGREEN 10

LIGHTCYAN 11

LIGHTRED 12

LIGHTMAGENTA 13

YELLOW 14

WHITE 15

BLINK 128


El BLINK es para hacer al cursor parpadeante.


Ejemplo:


textcolor(RED);


hará que todo el texto que se imprima a continuación aparezca en rojo.


textbackground: Definida dentro de conio.h. Esta función cambia el color del fondo de pantalla sobre el cual se muestran las letras.


Su prototipo es: void textbackground(int color);


El color de fondo sólo puede ser de los 8 principales colores así que sólo aplican las 8 primeras MACROS mencionadas en textcolor ( de 0 a 7 ).


Ejemplo:


textbackground(RED); // El color de fondo será Rojo

textcolor(BLUE); // El color del texto será Azul.

clrscr(); // Borra la pantalla pero debido a que el color de fondo es rojo,

// toda la pantalla se verá roja.

printf(“Texto\n); // Imprime la palabra “Texto” en Azul sobre el fondo rojo.


clrscr: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


Esta función borra todo el contenido de la ventana de texto actual.


El prototipo de clrscr es: void clrscr(void);


Su forma de uso es:


clrscr();


gotoxy: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


El prototipo de gotoxy es: void gotoxy(int x, int y);


Esta función coloca al cursor en la posición de pantalla apuntada por las coordenadas x e y dentro de la pantalla de texto actual. Una pantalla estándar de DOS contiene 80 columnas por 25 filas. Si las coordenadas no son válidas, no se hace nada.


Ejemplo:


clrscr();

gotoxy(20,10);

putchar('*');


borra la pantalla, se posiciona en la columna, fila 10 e imprime el caracter *.


wherex: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


El prototipo de wherex es: int wherex(void);


Retorna la columna en la que se encuentra posicionado el cursor relativa a la ventana de texto actual.


wherey: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


El prototipo de wherey es: int wherey(void);


Retorna la fila en la que se encuentra posicionado el cursor relativa a la ventana de texto actual.


window: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


El prototipo de window es: void window(int izq, int arr, int der, int aba);


Esta función se usa para crear una ventana de texto rectangular con coordenadas superior-izquierda e inferior-derecha dadas por izq,arr y der,aba. Si las coordenadas no son válidas, no se hace nada.


Es por esta función que he estado comentando en las funciones anteriores: “dentro de la pantalla de texto actual” ya que luego de usada esta funcion, todas las opereciones como clrscr, cprintf, gotoxy, etc, son relativas a esta nueva ventana.


Ejemplo:


window(10, 10, 60, 15); // crea una ventana cuyas esquinas son (10,10) y (60,15)

gotoxy(2, 3); // Se coloca en la posición (2,3) dentro de la ventana anterior.


cprintf: No está definida por el ANSI C. Esta función se encuentra dentro de la librería conio.h de Borland.


El prototipo de cprintf es: int cprintf(const char *fmt,...);


Hace lo mismo que printf pero dentro de la ventana de texto actual.


Siguiendo el mismo ejemplo anterior, si añadimos:


cprintf(“Punto (2,3) de la ventana activa\n\r”);


imprimiría dentro de la ventana definida en la posición dada la frase: “Punto (2,3) de la ventana activa”.

Debe ponerse también \r ya que cprintf no interpreta el \n como un par \r\n como hace el printf. \r es retorno de carro.