C (Conceptos Básicos)

Índice de contenidos

1. Tipos de variables
2. Operadores
3. Sentencias
4. Arrays y cadenas
5. Punteros
6. Entrada y salida
7. Librerías

Para ver ejemplos de código vea Curso Práctico de C

1. Tipos de variables

Existen cinco tipos básicos: carácter, entero, coma flotante, coma flotante de doble precisión y void. Los demás tipos se basan en alguno de estos tipos básicos. El tamaño y el rango de estos tipos de datos varían con cada tipo de procesador y con la implementación del compilador de C.
El tipo void, o bien declara explícitamente una función como que no devuelve valor alguno, o bien crea punteros genéricos.
La siguiente tabla muestra todas las combinaciones que se ajustan al estándar ANSI junto con sus rangos mínimos y longitudes aproximadas en bits.

TipoTamañoRango
Char8-127 a 127
unsigned char80 a 255
signed char8-127 a 127
int16-32767 a 32767
unsigned int160 a 65535
signed int16-32767 a 32767
short int16-32767 a 32767
unsigned short int160 a 65535
signed short int16-32767 a 32767
long int>32-2147483647 a 2147483647
signed long int32-2147483647 a 2147483647
unsigned long int320 a 4294967295
float326 dígitos de precisión
double6410 dígitos de precisión
long double6410 dígitos de precisión

C utiliza unos tipos de elementos creados, como son las enumeraciones, estructuras, uniones y estructuras y tipos definidos por el usuario.

Enumeración: listas de constante enteras con nombre. Para crear una enumeración se utiliza la palabra reservada enum. La sintaxis es la siguiente:

enum identificador {lista de nombres};

En una enumeración, el primer valor tiene, por defecto, el valor 0; el segundo nombre 1, y así sucesivamente. Este valor se puede cambiar por el programador, por ejemplo:

enum vehiculo {coche=10, camion=20, moto=30};
enum vehiculo vehiculo1;

Estructura: Es una colección de variables que se referencia bajo un único nombre, proporcionando un medio eficaz de mantener junta la información relacionada. Una definición de estructura forma una plantilla que puede utilizarse para crear variables de estructura. En general cada elemento de la estructura está relacionado lógicamente con los otros. La palabra clave struct indica al compilador que se está definiendo una plantilla de estructura. Por ejemplo:

struct direc { int numero; char calle[40]; char ciudad [20]; };

Para referir a un elemento individual de la estructura se utiliza el operador punto (.), por ejemplo:

direc.numero= 24;

Unión: Es una posición de memoria que es compartida por dos o más variables diferentes, generalmente de distinto tipo, en distintos momentos. La definición es similar a la de la estructura. La palabra clave es union:

union etiq { int i; char ch };

En una variable que este definida del tipo etiq, tanto el entero i como el carácter ch comparten la misma posición de memoria.

Tipos definidos: C permite definir explícitamente un nuevo nombre de tipo de dato usando la palabra clave typedef. Realmente no se crea una nueva clase de datos, sino que se define un nuevo nombre para un tipo existente. La forma general es:

typedef tipo nombre;

Por ejemplo:

typedef float peso;

Ir al índiC

2. Operadores

C es un lenguaje muy rico en operadores. Se definen seis tipos de operadores aritméticos, lógicos, relacionales, de asignación, de dirección y de desplazamiento.
Existe otro tipo de operador denominado molde que su función es hacer posible que una expresión sea de un tipo determinado utilizando la sintaxis

(tipo) expresión;

Por ejemplo, si se quiere asegurar que la expresión x/2 se evalúe de tipo float, se puede escribir:

(float) x/2;

2.1. Operadores aritméticos

Operadores Artiméticos
OperadorSignificado
+ Suma
- Resta
* Producto
/ Cociente de división
% Resto de división

2.2. Operadores lógicos

Operadores Lógicos
OperadorSignificado
! NOT (No lógico)
&& AND (Y lógico
|| OR (O lógico)

2.3. Operadores relacionales

Operadores Relacionales
OperadorSignificado
== Igual a
!= Distinto de
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

2.4. Operadores de asignación

Operadores de Asignación
OperadorSentencia abreviadaSentencia NO abreviada
= = =
++ m++ m=m+1
-- m-- m=m-1
+= m+=n m=m+n
-= m-=n m=m-n
*= m*=n m=m*n
/= m/=n m=m/n
%= m%=n m=m%n
Los operadores de asignación ++ y – pueden ir antes o después de una expresión formando una nueva expresión. Estas expresiones se denominan post-incrementos o pre-incrementos (decrementos si el operador es --) y son expresiones compuestas, normalmente son del tipo:

y=x++; (y=++x;)

Existen una diferencia entre el post-incremento y el pre-incremento. El post-incremento primero suma uno a la variable (x en el ejemplo) y luego asigna ese valor (y en el ejemplo), mientras con el pre-incremento, la asignación es anterior.

2.5. Operadores de dirección

Estos son los operadores clave para realizar una buena programación mediante el uso de punteros.
Operadores de Dirección
OperadorSignificado
* Operador de contenido de apuntado u operador de indirección
& Operador de dirección

2.6. Operadores de desplazamiento

Existe un último tipo de operadores, no comentado hasta el momento, los operadores de desplazamiento (<<, desplazamiento a la izquierda y >>, a la derecha). Su función es desplazar los bits de la palabra de memoria dada tantos espacios como se le indiquen a derecha o izquierda. La forma general es:

expresion1 << expresion2

Los dos operandos deben ser del tipo entero, y mueve los bits de la expresion1 tantas posiciones como se lo indique la expresion2 (en este caso hacia la izquierda). Por ejemplo, sea x un entero con representación interna:

00010001110011000101010111111111
x<<4; da como resultado:
00011100110001010101111111110000

Ir al índiC

3. Sentencias

Una sentencia es cualquier expresión en C que se espera que tenga alguna consecuencia. Toda sentencia termina con un “;”.
Las sentencias pueden ser asignaciones, operaciones, llamadas a funciones o combinaciones de ellas.
Una sentencia simple consiste en una expresión acabada en un punto y coma (;).
Una sentencia compuesta es un conjunto de sentencia simples que se encierran entre los símbolos “{” y “}” para formar un bloque de código.
Pueden aparecer en cualquier sitio en el que podría aparecer una sentencia simple.
Pueden contener declaraciones de nuevos objetos (el alcance de la declaración afecta al bloque).
La sintaxis es:

{
sentencia;
sentencia;
….
sentencia;
}

3.1. Sentencias de selección

Existen dos tipos, if y switch. Además, el operador “?” es una alternativa para if en ciertas situaciones.

IF
La forma general es:

if (expresion) sentencia;
else sentencia;

Donde sentencia puede ser una sentencia simple, un bloque de sentencias o nada (en el caso de sentencias vacías). La cláusula else es opcional.
Si la expresión del if es cierta (cualquier valor que no sea 0), se ejecuta la sentencia o el bloque de sentencias que constituye el objetivo del if; en cualquier otro caso se ejecuta la sentencia o bloque de sentencias que constituye el objetivo del else, si existe. Siempre se ejecuta el código asociado al if o al else, nunca ambos.

La alternativa ?
Se puede usar el operador “?” para reemplazar las sentencias if-else con la forma general:

if(condición) Expresión1;
else Expresión2;

la ? es un operador ternario, ya que necesita tres operandos y tiene la forma general:

Condición ? Expresión1 : Expresión2;

Donde Condición, Expresión1 y Expresión2 son expresiones. El valor de una expresión con ? se determina de esta forma, se evalúa Condición, si es cierta se evalúa Expresión1 y se convierte en el valor de la expresión completa. Si Condición es falsa, se evalúa Expresión2 y su valor se convierte en el valor de la expresión completa. Por ejemplo:

x = 10;
y = x >9 ? 100 : 200;

En el ejemplo a “y” se le esta asignando el valor 100.

SWITCH
Es una sentencia de selección múltiple, que compara sucesivamente el valor de una expresión con una lista de constantes enteras o de caracteres. Cuando se encuentra una correspondencia, se ejecutan las sentencias asociadas con la constante. La forma general es:

switch (expresión) {
case constante1:
secuencia de sentencias;
break;
case constante2:
secuencia de sentencias;
break;
…..
…..
default:
secuencia de sentencias;
}

Se comprueba el valor de la expresión, por orden, con los valores de las constantes especificadas en las sentencias case. Cuando se encuentra una correspondencia, se ejecuta la secuencia de sentencias asociada con ese case, hasta que se encuentra la sentencia break o el final de la sentencia switch. Si no se incluye la sentencia break, sigue buscando más correspondencias en las siguientes sentencias case. La sentencia default se ejecuta si no se ha encontrado ninguna correspondencia. La sentencia default es opcional, y si no está presente, no se ejecuta ninguna acción al fallar todas las comprobaciones.
La sentencia switch se diferencia de la sentencia if en que sólo puede comparar la igualdad, mientras que if puede evaluar expresiones relacionales o lógicas.
No puede haber dos constantes case en el mismo switch que tengan los mismos valores (por supuesto que una sentencia switch contenida en otra sentencia switch pude tener constantes case que sean iguales).
Si se utilizan constantes de tipo carácter en la sentencia switch, se convierten automáticamente a sus valores enteros.

3.2. Sentencias de iteración

También denominadas bucles. Permiten realizar un conjunto de instrucciones hasta que se alcance una cierta condición (que puede estar predefinida como en el bucle for; o no haber final predeterminado, como en los bucles while y do-while).

FOR
El formato general es:

for (inicialización; condición; incremento) sentencia;

La inicialización normalmente es una sentencia de asignación que se utiliza para iniciar la variable de control del bucle.
La condición es una expresión relacional que determina cuando finaliza el bucle. El incremento define como cambia la variable de control cada vez que se repite el bucle.
Estas tres secciones principales deben ser separadas por punto y coma (“;”). El bulce for continua ejecutándose mientras que la condición sea cierta. Una vez que la condición es falsa, la ejecución del programa sigue por la sentencia siguiente al for.
No es obligatoria ninguna de las tres expresiones, por ejemplo, se puede realizar un bucle infinito de la forma:

for(;;) printf(“este bucle estará siempre ejecutándose.\n”);

WHILE
Su forma general es:

while (condición) sentencia;

La condición puede ser cualquier expresión, cualquier valor distinto de 0 es cierto. El bucle itera mientras la condición sea cierta. Cuando la condición se hace falsa, el control del programa pasa a la línea siguiente al código del bucle.

DO-WHILE
A diferencia de los bucles for y while, que analizan la condición del bucle al principio del mismo, el bucle do-while analiza la condición al final del bucle. Esto significa que le bucle do-while siempre se ejecuta al menos una vez. La forma general es:

do {
sentencia;
} while (condición);

Aunque las llaves no son necesarias cuando sólo hay una sentencia, se utilizan normalmente para evitar confusiones al programador con el while.

3.3. Sentencias de salto

C tiene cuatro sentencias que llevan a cabo un salto incondicional (además de goto, pero su uso no está bien visto por sus programadores): return, break, exit() y continue.

RETURN
Se usa para volver de una función. Se trata de una sentencia de salto porque hace que la ejecución vuelva al punto en que se hizo la llamada a la función. Si hay algún valor asociado con return, se trata del valor de vuelta de la función. Si no se especifica un valor de vuelta, se asume que devuelve un valor sin sentido. La forma general es:

return expresión;

Donde expresión es opcional. Se pueden usar tantas sentencias return como se quiera en una función. Sin embargo, la función termina al encontrar el primero.

BREAK
Tiene dos usos: para finalizar un case en una sentencia switch y para forzar la terminación inmediata de un bucle, saltando la evaluación condicional normal del ciclo. Cuando se encuentra la sentencia break dentro de un bucle, el bucle finaliza inmediatamente y el control sigue en la sentencia posterior al bucle.

EXIT()
Igual que se puede interrumpir un bucle, se puede salir anticipadamente de un programa usando la función exit() de la biblioteca estándar. Esta función da lugar a la terminación inmediata del programa, forzando la vuelta al sistema operativo. La forma general de la función exit() es:

void exit (int código_de_vuelta);

El valor de código_de_vuelta es el que se devuelve al proceso de llamada, que normalmente es el sistema operativo. Generalmente se usa un cero como código de vuelta para indicar que se trata de una terminación normal del programa. Se utiliza otros argumentos para indicar algún tipo de error.

CONTINUE
Funciona de forma similar a break. Sin embargo, en vez de forzar la terminación, continue fuerza una nueva iteración del bucle y salta cualquier código que exista entremedias. Para el bucle for, continue hace que se ejecuten las partes de prueba condicional y de incremento del bucle. Para los bucles while y do-while, el control del programa pasa a la prueba condicional.

Ir al índiC

4. Arrays y cadenas

Un array es una colección de variables del mismo tipo que se referencian por un nombre común. A un elemento específico de un array se accede mediante un índice. En C todos los arrays constan de posiciones de memoria contiguas. La dirección más baja corresponde al primer elemento y la más alta al último. Los arrays pueden tener una o varias dimensiones. El array más común en C es la cadena, que simplemente es un array de caracteres terminado por uno nulo.

4.1. Arrays unidimensionales

Los arrays unidimensionales son listas de información del mismo tipo que se guardan en posiciones contiguas de memoria según el orden del índice.
La forma general de declaración es:

tipo nombre_variable [tamaño];

Los arrays tienen que declararse implícitamente para que el compilador reserve espacio en memoria para ellos. El tipo declara el tipo de los elementos del array, el tamaño indica cuántos elementos mantendrá el array.
Para declarar un array de 10 elementos denominado p y de tipo carácter, se escribe:

char p[10];

En este caso hemos declarado un array que tiene diez elementos, desde p[0] hasta p[9].
En C todos los arrays tienen el 0 como índice de su primer elemento. C no comprueba los límites de los arrays. Se puede pasar cualquier extremo de un array y escribir en alguna otra variable de datos e incluso en el código del programa.

4.2. Cadenas

El uso más común de los arrays unidimensionales es como cadenas de caracteres. En C una cadena se define como un array de caracteres que termina en un carácter nulo (‘\0’). Para declarar un array de caracteres es necesario un carácter más que la cadena más larga que pueda contener, para dejar sitio para el carácter nulo del final de la cadena.
Una constante de cadena es una lista de caracteres encerrada entre dobles comillas. Por ejemplo:

“hola, que tal”

No es necesario añadir explícitamente el carácter nulo al final de las constantes de cadena, el compilador lo hace automáticamente.

4.3. Arrays multidimensionales

C permite arrays de más de una dimensión. La forma general de declaración de un array multidimensional es:

Tipo nombre [a] [b] [c] ….. [z];

Los arrays de tres o más dimensiones no se utilizan a menudo por la cantidad de memoria que se requiere para almacenarlos, ya que el almacenamiento requerido aumenta exponencialmente con el número de dimensiones.

4.4. Inicialización de arrays

C permite la inicialización de arrays en el momento de declararlos, como en cualquier variable. La forma general es:

tipo nombre [tamaño1] … [tamaño n]={lista de valores};

la lista de valores es una lista de constantes separadas por comas cuyo tipo es compatible con el tipo especificado en la declaración del array. Por ejemplo:

int i[10] = {1,2,3,4,5,6,7,8,9,10};

Con las cadenas o arrays de caracteres se hace igual, aunque permite una inicialización abreviada. Estas dos sentencias producen el mismo resultado:

char cad[11] = “Me gusta C”;
char cad[11] = {‘M’,’e’,’ ‘,’g’,’u’,’s’,’t’,’a’,’ ‘,’C’,’\0’};

Los arrays multidimensionales se inicializan del mismo modo que los unidimensionales.

Ir al índiC

5. Punteros

Un puntero es una variable que contiene una dirección de memoria. Normalmente, esa dirección es la posición de otra variable de memoria. Si una variable contiene la dirección de otra variable, entonces se dice que la primera variable apunta a la segunda.
Si una variable va a contener un puntero, entonces tiene que declararse como tal. Una declaración de un puntero consiste en un tipo base, un * y el nombre de la variable. La forma general es:

tipo *nombre;

Donde tipo es cualquier tipo válido y nombre es el nombre de la variable puntero. El tipo base del puntero define el tipo de variables a las que puede apuntar. Técnicamente, cualquier tipo de puntero puede apuntar a cualquier dirección de la memoria, sin embargo, toda la aritmética de punteros esta hecha en relación a sus tipos base, por lo que es importante declarar correctamente el puntero.
Existen dos operadores especiales de punteros: & y *. El operador de dirección (&) devuelve la dirección de memoria de su operando. El operador de indirección (*) devuelve el contenido de la dirección apuntada por el operando.
Después de declarar un puntero, pero antes de asignarle un valor, éste contiene un valor desconocido; si en ese instante lo intenta utilizar, probablemente se estrellará, no sólo el programa sino también el sistema operativo. Por convenio, se debe asignar el valor nulo a un puntero que no este apuntando a ningún sitio, aunque ésto tampoco es seguro.

5.1. Asignación de punteros

Como en el caso de cualquier otra variable, un puntero puede utilizarse a la derecha de una declaración de asignación para asignar su valor a otro puntero. Por ejemplo:

int x;
int *p1,*p2;
p1=&x;
p2=p1;


Tanto p1 como p2 apuntan a x.

5.2. Asignación de punteros

Existen sólo dos operaciones aritméticas que se puedan usar con punteros: la suma y la resta.
Cada vez que se incrementa un puntero, apunta a la posición de memoria del siguiente elemento de su tipo base. Cada vez que se decrementa, apunta a la posición del elemento anterior. Con punteros a caracteres parece una aritmética normal, sin embargo, el resto de los punteros aumentan o decrecen la longitud del tipo de datos a los que apuntan.
Por ejemplo, si asumimos que los enteros son de dos bytes de longitud y p1 es un puntero a entero con valor actual 2000. Entonces, después de la expresión p1++; p1 contiene el valor 2002, no 2001.
No pueden realizarse otras operaciones aritméticas sobre los punteros más allá de la suma y resta de un puntero y un entero. En particular, no se pueden multiplicar o dividir punteros y no se puede sumar o restar el tipo float o el tipo double a los punteros.

5.3. Punteros y arrays

Existe una estrecha relación entre los punteros y los arrays. Considérese el siguiente fragmento:

char cad[80], *p1;
p1=cad;

Aquí, p1 ha sido asignado a la dirección del primer elemento del array cad. Para acceder al quinto elemento de cad se escribe cad[4] o *(p1+4).
Un nombre de array sin índice devuelve la dirección de comienzo del array, que es el primer elemento. El compilador traduce la notación de arrays en notación de punteros. Es decir, al crear un array se genera un puntero (en realidad una constante de puntero) con el mismo nombre que apunta a la dirección del primer elemento del array.

5.4. Arrays de punteros

Los punteros pueden estructurarse en arrays como cualquier otro tipo de datos. La declaración, por ejemplo, para un array de punteros a enteros de tamaño 10 es:

int *x[10];

Para asignar la dirección de una variable entera llamada var al tercer elemento del array de punteros se escribe:

x[2]=&var;

Se puede encontrar el valor de var de la forma:

*x[2];

Si se quiere pasar un array de punteros a una función, se puede utilizar el mismo método que se utiliza para otros arrays: llamar simplemente a la función con el nombre del array sin índices. Así se pasa el puntero que apunta al array. No se pasa un puntero a enteros, sino un puntero a un array de punteros a enteros.

5.5. Indirección múltiple

Se puede hacer que un puntero apunte a otro puntero que apunte a un valor de destino. Esta situación se denomina indirección múltiple o punteros a punteros.
Una variable que es puntero a puntero tiene que declararse como tal. Esto se hace colocando un * adicional en frente del nombre de la variable. Por ejemplo, la siguiente declaración inicial indica al compilador que ptr es un puntero a puntero de tipo float:

float **ptr;

5.6. Funciones de asignación dinámica, malloc() y free()

Los punteros proporcionan el soporte necesario para el potente sistema de asignación dinámica de memoria de C. La asignación dinámica es la forma en la que un programa puede obtener memoria mientras se está ejecutando.
El centro del sistema de asignación dinámica está compuesto por las funciones (existentes en la biblioteca stdlib.h) malloc(), que asigna memoria; y free() que la devuelve.
El prototipo de la función malloc() es:

void *malloc(size_t número de bytes);

Tras una llamada fructífera, malloc() devuelve un puntero, el primer byte de memoria dispuesta. Si no hay suficiente memoria libre para satisfacer la petición de malloc(), se da un fallo de asignación y devuelve un nulo. El fragmento de código que sigue asigna 1000 bytes de memoria:

char *p;
p = (char *) malloc(1000);

Después de la asignación, p apunta al primero de los 1000 bytes de la memoria libre. El siguiente ejemplo dispone espacio para 50 enteros. Obsérvese el uso de sizeof para asegurar la portabilidad:

int *p;
p= (int *) malloc(50*sizeof(int));

La función free() es la opuesta de malloc() porque devuelve al sistema la memoria previamente asignada. Una vez que la memoria ha sido liberada, puede ser reutilizada en una posterior llamada a malloc(). El prototipo de la función free() es:

void free (void *p);
free(p);



Ir al índiC

6. Entrada y salida

En C no existe ninguna palabra clave para realizar la entrada y salida de datos (E/S). Se realizan a través de funciones de biblioteca (concretamente, la biblioteca stdio.h).

6.1. E/S por consola

Las funciones principales que realizan la entrada y salida sin formato son:
  • getchar(): Lee un carácter del teclado. Espera hasta que se pulsa una tecla y entonces devuelve su valor.
  • putchar(): Imprime un carácter en la pantalla en la posición actual del cursor.
  • gets(): Lee una cadena de caracteres introducida por el teclado y la sitúa en una dirección apuntada por su argumento de tipo puntero a carácter.
  • puts(): Escribe su argumento de tipo cadena en la pantalla seguida de un carácter de salto de línea.
Las funciones principales que realizan la entrada y salida con formato, es decir, se pueden leer y escribir en distintas formas controladas, son:
printf(): Escribe datos en la consola con el fo rmato especificado.
scanf(): Función de entrada por consola con el formato especificado.
Sus prototipos son los siguientes:

int printf (“ caracteres de transmisión y escape“, lista de argumentos);
int scanf (“ caracteres de transmisión y escape“, lista de argumentos);

En la función printf() (con scanf() no), entre las comillas se pueden poner rótulos literales mezclados con los caracteres de transmisión.

6.2. E/S por archivos

En C un archivo puede ser cualquier cosa, desde un archivo de disco a un terminal o una impresora. Se asocia una secuencia con un archivo específico realizando una operación de apertura, una vez que está abierto, la información puede ser intercambiada entre éste y el programa. El puntero a un archivo es el hilo que unifica el sistema de E/S con buffer. Un puntero a un archivo es un puntero a una información que define varias cosas sobre él, incluyendo el nombre, el estado y la posición actual del archivo. En esencia, el puntero a un archivo identifica un archivo en disco específico y utiliza la secuencia asociada para dirigir el funcionamiento de las funciones de E/S con buffer. Para obtener una variable de tipo puntero a archivo se debe utilizar una sentencia como la siguiente:

FILE *punt;

La función fopen() abre una secuencia para que pueda ser utilizada y le asocia a un archivo. Su prototipo es:

FILE *fopen(const char *nombre_archivo, const char *modo);

Donde nombre_archivo es un puntero a una cadena de caracteres que representan un nombre válido del archivo y puede incluir una especificación de directorio. La cadena que apunta modo determina cómo se abre el archivo. Los modos son los siguientes:
  • r: Abre un archivo de texto para lectura
  • w: Crea un archivo de texto par escritura
  • a: Abre un archivo de texto para añadir
  • r+: Abre un archivo de texto para lectura/escritura
  • w+: Crea un archivo de texto para lectura/escritura
  • a+: Añade o crea un archivo de texto para lectura/escritura
Por ejemplo, si desea abrir un archivo llamado prueba para escritura, escribir:

FILE *fp;
fp=fopen(“prueba”,”w”);

La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().
Escribe toda la información que todavía se encuentre en el buffer del disco y realiza un cierre formal del archivo a nivel del sistema operativo. También libera el bloque de control de archivo asociado con la secuencia, dejándolo libre para su reutilización. A veces es necesario cerrar algún archivo para poder abrir otro, debido a la existencia de un límite del sistema operativo en cuanto al número de archivos abiertos. Su prototipo es:

int fclose(FILE *fp);

La función putc() escribe caracteres en un archivo que haya sido abierto previamente para operaciones de escritura, utilizando la función fopen(). Su prototipo es:

int putc(int car, FILE *pf);

La función getc() escribe caracteres en un archivo que haya sido abierto, en modo lectura, mediante fopen(). Su prototipo es:

int getc(FILE *pf);

La función fputs() escribe la cadena en la secuencia especificada. Su prototipo es:

int fputs(const char *cad, FILE *pf);

La función fgets() lee una cadena de la secuencia especificada hasta que se lee un carácter de salto de línea o hasta que se han leído longitud-1 caracteres. Su prototipo es:

int fgets(char *cad, FILE *pf);

La función rewind() inicia el indicador de posición al principio del archivo indicado por su argumento. Su prototipo es:

void rewind(FILE *pf);

Existen otras muchas funciones en la biblioteca estándar de C (ver capítulo 13) como pueden ser:
  • remove(): Borra el archivo especificado.
  • fflush(): Vacía el contenido de una secuencia de salida.
  • fread(): Lee tipos de datos que ocupan más de un byte. Permiten la lectura de bloques de cualquier tipo de datos.
  • fwrite(): Escribe tipos de datos que ocupan más de un byte. Permiten la escritura de bloques de cualquier tipo de datos.
  • fprintf(): Hace las funciones de printf() sobre un fichero.
  • fscanf(): Hace las funciones de scanf() sobre un fichero.
  • feof(): Detecta el final de un fichero.
  • ferror(): Detecta un error en la lectura/escritura de un fichero.

Ir al índiC

7. Librerías

El estándar ANSI C define un conjunto de funciones, así como tipos relacionados y macros, que son proporcionados para la implementación.
Todas las librerías son declaradas en un fichero cabecera. Para que sea visible al programa, se añade el comando del preprocesador #include. Por ejemplo:

#include ;

Cada fichero de cabecera se denomina librería. Las librerías estándar son:

LibreríaDescripción
assert.h Contiene una macro para el diagnóstico dentro de los programas.
ctype.h Contiene varias funciones para comprobación de tipos y
transformación de caracteres.
errno.h Contiene varias macros usadas para informar de errores.
limits.h Contienen varias macros que definen constantes para el
tamaño de tipo enteros.
float.h Contienen varias macros que definen constantes para el
tamaño de tipo flotante.
locale.h Contienen varias macros, funciones y tipos para unidades
locales, como unidad monetaria, tiempo, dígitos, etc.
math.h Contiene una macro y varias funciones matemáticas.
setjmp.h Contienen declaraciones que proporcionan una forma de evitar
la secuencia normal de llamada y regreso de funciones.
signal.h Contiene un tipo, dos funciones y varias macros para manejar
condiciones excepcionales que aparecen durante la ejecución, tal como
una señal de interrupción de una fuente externa o un error en
la ejecución.
stdarg.h Contiene un tipo y tres macros que proporcionan recursos para
recorrer una lista de argumentos de función de tamaño y tipo desconocido.
stddef.h Contiene varios tipos y macros que también están definidas en
otras librerías, como size_t.
stdio.h Contiene tipos, macros y funciones para la realización de tareas de E/S.
stdlib.h Contiene tipos, macros y funciones para la conversión numérica,
generación de números aleatorios, búsquedas y ordenación,
gestión de memoria y tareas similares.
string.h Contiene tipos, macros y funciones para la manipulación de cadenas
de caracteres.
time.h Contiene tipos, macros y funciones para la la manipulación de
información sobre fechas y horas.


Ir al índiC



Comentarios

Entradas populares de este blog

Algoritmo de ordenación por mezcla natural

Algoritmo de ordenación por mezcla directa

Algoritmo de Ordenación por Intercambio Directo (Burbuja)