Está en la página 1de 32

LENGUAJE C

Departamento de Computación

Lenguaje C 1

Orígenes
 Fue creado por Dennis Ritchie de los
laboratorios BELL en 1972, cuando
trabajaba junto a Ken Thompson, en
el diseño del sistema operativo UNIX.
Se deriva del lenguaje B de
Thompson, que a su vez se deriva del
BCPL de Martín Richards.

1
Características
 Es un lenguaje moderno de propósito
general, que incorpora las características
de control apuntadas como deseables por la
teoría y práctica de la informática.
 Planificación escalonada.
 Programación estructurada.
 Diseño modular.
 Programas compactos.
 Rapidez de ejecución.
 Portátil.
 De relativo bajo nivel.
 Precisa compilarse.

Lenguaje C. 3

Proceso de edición y compilación


 Los pasos necesarios para desarrollar
un programa C son los siguientes:
 Edición: Utilizar un editor para escribir el
programa fuente texto.
 Compilación: Compilar el programa
fuente, es decir, traducir el programa a
lenguaje máquina.
 Ejecución: Una vez compilado se procede
a la ejecución del programa tecleando el
nombre del fichero-programa.

Lenguaje C. 4

2
Proceso de edición y compilación

Lenguaje C. 5

Estructura de un programa
 Un programa en C consiste en una o más funciones, de las
cuales una de ellas, debe llamarse main() y es la principal
de todas.
 El programa comienza con la función: main()
 Cada función o programa, consta de un cuerpo de función
delimitado por llaves de comienzo y fin { }
 En el cuerpo de la función irán incluidas: sentencias, variables,
funciones, etc. terminadas cada una de ellas por un punto y
coma ;
main() nombre de la función
{ comienzo del cuerpo de la función
variables;
sentencias;
funciones; cuerpo de la función
...............;
...............;
} fin de la función

Lenguaje C. 6

3
Tipos de datos
 Los datos manejados en C pueden ser de cinco tipos
básicos.
 INT: enteros sin decimales entre (-32768 y +32767).
Ocupan en la memoria 2 bytes.
 CHAR: caracteres alfabéticos, signos especiales, etc.
El rango es (0 y 255). Ocupan en la memoria 1 byte.
 FLOAT: números decimales entre (3.4E-38 a
3.4E+38) con ocho dígitos de precisión. Ocupan en la
memoria 4 bytes.
 DOUBLE: números decimales entre (1.7E-308 a
1.7E+308) con 16 dígitos de precisión. Ocupan en la
memoria 8 bytes.
 VOID: sin valor. No almacenar nada y por tanto no
necesitan espacio físico de la memoria.
Lenguaje C. 7

Identificadores de tipo
 Todos los tipos básicos excepto void
pueden tener modificadores. Se usan para
alterar el significado de un tipo base de
acuerdo con nuestras necesidades.
 Los modificadores son:
 signed
 unsigned
 long
 short

Lenguaje C. 8

4
Variables
 Se utilizan para almacenar datos internamente en la
memoria de trabajo del ordenador, durante la
ejecución de un programa.
 Como nombres de variables se admiten letras y
números (por norma letras minúsculas).
 El primer carácter debe ser una letra.
 No se admiten blancos pero sí el signo de subrayado.
 Sólo se admiten los ocho primeros caracteres.
 Mayúsculas y minúsculas se diferencian.
 No se pueden emplear palabras clave del lenguaje.

Lenguaje C. 9

Constantes
 Son valores que no varían durante la
ejecución de un programa. Pueden adoptar
cualquiera de los tipos de datos declarados
anteriormente. Es conveniente declararlas
al principio del programa.
 La sentencia #define es usada para definir
las constantes y se coloca al principio del
programa antes de la función main().
 #define PI 3.14159
 #define PRIMO 13
 Las constantes como norma se suelen
escribir con mayúsculas.
Lenguaje C. 10

5
Operadores aritméticos
 Operador de asignación: = Asigna a la variable de la
izquierda el valor de la derecha.
 Operador de adición: + Hace que los dos valores
situados a su izquierda y derecha se sumen.
 Operador de sustracción: - Hace que se reste el
número situado a su derecha del situado a su
izquierda.
 Operador de multiplicación: * Hace que se
multipliquen los dos valores situados a su izquierda y
derecha.
 Operador de división: / Hace que el valor situado a su
izquierda sea dividido por el que se encuentra a su
derecha.

Lenguaje C. 11

Operadores adicionales
 Operador módulo: % Proporciona el resto de la
división entera del número situado a su izquierda
entre el situado a su derecha.
 Operador incremento: ++ Realiza la tarea de
incrementar en uno el valor de su operando.
 a++; modo sufijo
 ++a; modo prefijo
 La diferencia entre ambos, reside en el preciso
momento en que se realiza la operación incremento.
 Operador decremento: -- Realiza la tarea de
decrementar en uno el valor de su operando.
 b--; modo sufijo
 --b; modo prefijo

Lenguaje C. 12

6
Operadores relacionales
 < es menor que
 <= es menor o igual que
 == es igual a
 >= es mayor o igual que
 > es mayor que
 != es distinto de

Lenguaje C. 13

Operadores lógicos
 && and (y)
 || or (o)
 ! not (no)

Lenguaje C. 14

7
Precedencia de operadores

Lenguaje C. 15

Función printf()
 Lee datos del programa (variables, resultados de operaciones,
frases, mensajes, etc.) y los envía a la pantalla. El formato es el
siguiente:
printf(“Cadena de control”, variables, operaciones, ...);
 La cadena de control se usa para escribir mensajes, identificar el
tipo de dato que se va a mostrar, indicar controles tales como:
salto de línea, salto de página, etc. Los identificadores empleados
son los siguientes:
Identificador Salida
%d entero decimal
%c carácter
%s tira de caracteres
%f número de punto flotante con notación decimal
%e número de punto flotante con notación exponencial
%u entero decimal sin signo
%o entero octal sin signo
%x entero hexadecimal sin signo (minúsculas)
%X entero hexadecimal sin signo (mayúsculas)

Lenguaje C. 16

8
Caracteres de control
 \n cambia de línea
 \r retorno de carro
 \t tabulador
 \b retroceso del cursor una posición
 \f cambio de página
 \\ barra atrás (\)
 \’ apóstrofe (‘)
 \” comillas (“)
Lenguaje C. 17

Función scanf()
 Esta función, lee datos del teclado y los entrega al
programa. El formato es el siguiente:
scanf(“Cadena de control”, variable, variable, ...);
 La cadena de control se usa para identificar el tipo de
dato que se va a introducir o capturar. Los
identificadores empleados son los mismos que los
empleados en la función printf().
 La variable o variables que se van a introducir tendrán
que ir acompañadas delante del nombre por el signo
(&). Si el dato que se va a introducir es una tira de
caracteres tipo char[ ], no es necesario el signo.

Lenguaje C. 18

9
Sentencias de control
 Las sentencias de control de los programas
especifican el orden en que se han de realizar las
operaciones. Existen tres formas básicas de flujo en
los programas.
 Estructuras secuenciales: se componen de una serie
de sentencias que se ejecutan unas tras otras en el
orden escrito en el programa. Para estas estructuras
no se necesita ninguna sentencia de control del flujo
del programa.
 Estructuras condicionales: dentro del flujo del
programa se toman decisiones para realizar unas
acciones u otras dependiendo de que se cumplan una
serie de condiciones.
 Estructuras repetitivas: repetición de una serie de
sentencias mientras no se cumpla una determinada
condición. También denominadas bucles.
Lenguaje C. 19

if-else
 Formato 1:
if (condición)
{ sentencias }
 Formato 2:
if (condición)
{ sentencias 1}
else
{ sentencias 2 }

Lenguaje C. 20

10
Expresión condicional
 Formato:
expresión 1 ? expresión 2 : expresión 3
 El valor de la expresión total es igual
al valor de la expresión 2, si
expresión 1 es cierta, mientras que si
es falsa toma el valor de la expresión
3.

Lenguaje C. 21

switch-case
 El formato es el siguiente:
switch (variable)
{
case etiq 1: sentencia 1
case etiq 2: sentencia 2
....................................
default: sentencia 3
}

Lenguaje C. 22

11
Bucle for
 Formato:
for (inicio; condición; incremento)
{
sentencias
}

Lenguaje C. 23

Bucle while
 Formato:
while ( condición)
{
sentencias
}

Lenguaje C. 24

12
Bucle do-while
 Formato:
do
{
sentencias
}
while (condición);

Lenguaje C. 25

Otras sentencias
 break: cuando el programa llega a esta sentencia, el
flujo del mismo se desvía, liberándose del bucle en
donde se encontraba, y dirigiéndose a ejecutar la
siguiente sentencia del programa.
 • continue: al igual que break, interrumpe el flujo del
programa; sin embargo, en lugar de finalizar el bucle
completo, hace que el resto de la iteración se evite,
comenzando una nueva iteración.
 • goto: hace que el control del programa salte a una
nueva sentencia. Esta sentencia tiene dos partes: el
goto y un nombre de etiqueta. Para que esta
sentencia funcione debe haber otra sentencia que
contenga la etiqueta.

Lenguaje C. 26

13
Función getchar()
 Esta función se usa para capturar caracteres uno a uno
desde la entrada estándar activa (teclado, fichero de texto,
etc.) y los entrega al programa. El formato es elsiguiente:
char variable;
variable=getchar();
 El valor del carácter capturado se almacena en la variable.
No se recomienda en entornos interactivos, ya que los
caracteres tecleados son almacenados en el buffer de
teclado y liberados cuando se pulsa un retorno de carro.
Tiene eco de pantalla de los caracteres tecleados.
 Otras funciones más interesantes en entornos interactivos
son getch() y getche(). Ambas funciones no tienen
almacenamiento en el buffer de teclado y se diferencian en
que la primera no tiene eco de pantalla y la segunda si.

Lenguaje C. 27

Función putchar()
 Esta función se usa para mostrar caracteres
uno a uno hacia la salida estándar activa,
bien sea la pantalla o bien otros
dispositivos como por ejemplo un fichero de
texto en disco. Se usa en combinación con
la función getchar().
 El formato es el siguiente:
char variable;
variable=getchar();
putchar(variable);

Lenguaje C. 28

14
El preprocesador
 Se encarga de leer el programa antes de que pase por
la fase de compilación.
 Entre las tareas que realiza podemos citar: sustituir
abreviaturas simbólicas por las direcciones que
representan, buscar otros ficheros donde se
encuentran escritos trozos de programa, tomar
decisiones sobre qué partes enviar al compilador y
que partes no, etc.
 Las órdenes del preprocesador son sentencias cuyo
primer carácter debe ser #, sin que haya ningún
espacio en blanco al comienzo de la línea.

Lenguaje C. 29

#DEFINE
 Puede aparecer en cualquier lugar del
fichero fuente, y la definición es
válida desde el lugar en que aparece
el comando hasta el final del fichero.
 Se usa para definir constantes
simbólicas en los programas y macros

Lenguaje C. 30

15
#INCLUDE
 Cuando el preprocesador encuentra este
comando, busca el fichero que atiende por
el nombre que está situado detrás y lo
incluye en el fichero actual.
#include <stdio.h>
/* Busca en los directorios del sistema */
#include “fichero.h”
/* Busca en el directorio que está
trabajando */
#include “a:stdio.h”
/* Busca en la unidad a */

Lenguaje C. 31

Arrays
 Un array en lenguaje C, es una serie de variables que
comparten el mismo nombre básico y se distinguen
entre sí con una etiqueta numérica. También se
pueden definir como una serie de posiciones de
memoria contiguas que almacenan elementos de un
mismo tipo.
 Por ejemplo, la declaración: int a[10] nos indica que
“a” es un array capaz de almacenar 10 valores de tipo
entero. Para acceder a cada uno de los elementos del
array se usa un índice. Así, en el ejemplo anterior, los
distintos elementos del array serán:
a[0], a[1], a[2], a[3], ..............,a[9]
 Los arrays pueden ser de cualquier tipo de datos.

Lenguaje C. 32

16
Arrays multidimensionales
 El lenguaje C permite crear arrays multidimensionales
y por tanto permite los arrays bidimensionales (filas y
columnas), también conocidas como matrices.
 Ejemplo de array bidimensional de 4 filas y 8
columnas:
int a[4][8];
a[0][0], a[0][1], a[0][2],.................a[0][7]
a[1][0], a[1][1], a[1][2],.................a[1][7]
a[2][0], a[2][1], a[2][2],.................a[2][7]
a[3][0], a[3][1], a[3][2],.................a[3][7]
 Para acceder al elemento de la fila 2 y columna 3
haremos referencia al a[1][2]

Lenguaje C. 33

Punteros
 Un puntero es una variable que contiene una
dirección, que es a su vez la posición de otra variable
de memoria, es decir, apunta a una posición de
memoria.
 Un puntero es una variable que contiene la dirección
de otra variable. Los punteros contienen direcciones
de memoria.
 La principal ventaja de usar punteros es la mayor
velocidad de tratamiento de los datos y sobre todo
para manejar arrays y tiras de caracteres.
 Se utilizan dos operadores especiales:
 * nos proporciona el contenido de una variable.
 & nos proporciona la dirección de una variable.

Lenguaje C. 34

17
Arrays con punteros
 Existe una fuerte relación entre punteros y
arrays, ya que para acceder a cada uno de
los elementos del array se puede hacer con
punteros aumentando de esta forma la
velocidad.
 Para acceder a los elementos de un array
existen dos formas:
 Indexando con un índice normal para acceder a
cada uno de los elementos.
 Con punteros con lo que se consigue una mayor
velocidad de acceso a los elementos del array.

Lenguaje C. 35

Ejemplo
int *pu ----> declaración de un puntero a entero.
int a[10] ----> declaración de un array con 10 elementos.
pu=&a[0] ----> el puntero apunta al primer elemento.
x=*pu ----> la x toma el valor del primer elemento.
y=*(pu+1) ----> la y toma el valor del segundo
elemento.
z=*(pu+2) ----> la z toma el valor del tercer elemento.

Hay que hacer notar que pu=a es lo mismo que


pu=&a[0].

Lenguaje C. 36

18
Arrays de cadenas de caracteres
 Una cadena de caracteres es un array tipo char terminado
con un carácter nulo “\0” y todas las operaciones con
cadenas se realizan indexando con punteros que apuntan a
cada uno de los caracteres de la cadena o tira.
Ejemplo:
char a[10]=”CADENAS”;
char *p;
p=&a[0]; ----> el puntero apunta a la C
p+1 ----> el puntero apunta a la A
p+2 ----> el puntero apunta a la D
etc.
 El compilador es el encargado de añadir el carácter nulo al
final de la tira sin preocuparse de ello el programador.

Lenguaje C. 37

Función gets()
 La función gets() es utilizada para capturar
tiras de caracteres desde el teclado y
asignarlas a los arrays de caracteres. La
función captura caracteres hasta que se
pulsa el retorno de carro. El retorno de
carro no forma parte de la cadena
capturada, en su lugar se coloca el carácter
nulo ‘\0’.
char nombre[35];
printf(“Introduzca nombre: “); gets(nombre);
printf(“Hola %s “, nombre);

Lenguaje C. 38

19
Función puts()
 La función puts() es utilizada para mostrar
tiras de caracteres por la pantalla.
main()
{
char nombre[35];
printf(“Introduzca nombre: “);
gets(nombre);
puts(“Hola “);
puts( nombre);
}

Lenguaje C. 39

Arrays multidimensionales de
cadenas de caracteres
 Para tratar una tira de caracteres, solo es necesario
usar un array tipo char unidimensional. Para tratar
varias tiras de caracteres a la vez, es necesario
utilizar arrays tipo char de dos dimensiones en las
que:
char nombre[10][30];
 filas: las 10 diferentes cadenas o nombres.
 columnas: los 30 posibles caracteres de cada cadena.
 En el ejemplo anterior necesitamos un total de 10
punteros para cada una de las cadenas o nombres.

Lenguaje C. 40

20
Funciones con cadenas
 strlen()
 strcat()
 strcmp()
 strcpy()
 strupr()
 strlwr()

Lenguaje C. 41

Funciones
 Las funciones son los bloques constructores del C y el
lugar donde se centra toda la actividad del programa.
Son una de las características más importantes del C.
 La forma general de una función es:
tipo nombre_función(lista_parámetros)
{
cuerpo_de_la_función
}
Siendo tipo, el tipo de dato devuelto por la función. Si
no se especifica ningún tipo, el compilador interpreta
que se devuelve un entero. Nombre_función
representa el nombre dado a la función. Y
lista_parámetros son los argumentos que toma la
función.

Lenguaje C. 42

21
Llamada por valor o referencia
 Por valor: Este método copia el valor de un
argumento en el parámetro formal de la
función. De esta forma, los cambios en los
parámetros de la función no afectan a las
variables que se usan en la llamada.
 Por referencia: Este método copia la
dirección del argumento en el parámetro de
la función. De esta forma, los cambios
hechos a los parámetros afectan a la
variable usada en la llamada.
Lenguaje C. 43

Sentencia return
 La sentencia return tiene dos usos importantes.
Primero, fuerza la salida de la función donde se
encuentra. O sea, hace que la ejecución del programa
vuelva al código que llamó a la función.
 En segundo lugar, se puede utilizar para devolver un
valor.
 Se vuelve de una función por: haber llegado al final
del cuerpo de la función o porque hemos encontrado
una sentencia return.
 Todas las funciones, excepto las de tipo void,
devuelven un valor.

Lenguaje C. 44

22
Argumentos del main()
 Algunas veces es útil pasar información al programa cuando
se ejecuta. El
 método general es pasar información a la función main()
mediante el uso de argumentos en la línea de órdenes.
 Un argumento de la línea de órdenes es la información que
sigue al nombre del programa en la línea de órdenes del
sistema operativo.
 Hay dos argumentos ya incorporados, argc y argv que se
utilizan para recibir los argumentos de la línea de órdenes.
 El parámetro argc contiene el número de argumentos de la
línea de órdenes y es un entero. Como mínimo vale 1 ya
que el nombre del programa es el primer argumento.
 El parámetro argv es un puntero a un array de punteros a
caracteres. Cada elemento del array apunta a un
argumento de la línea de órdenes.
 Todos los argumentos de la línea de órdenes son cadenas.

Lenguaje C. 45

Recursividad
 En C, las funciones pueden llamarse a
sí mismas. Si una expresión en el
cuerpo de una función llama a la
propia función, se dice que ésta es
recursiva.
 La recursividad es el proceso de
definir algo en términos de sí mismo,
a veces se llama definición circular.

Lenguaje C. 46

23
Punteros a funciones
 La dirección de la función es el punto de entrada de la
función.
 Por ello, se puede usar un puntero a función para
llamar a una función.
 Esto también permite pasar funciones como
argumentos a otras funciones.
 La dirección de la función se obtiene utilizando el
nombre de la función sin paréntesis ni argumentos.
void (*p) (int i); /* Puntero a función */
void lineav(), lineah(); /* Prototipos */
p=lineav; /* Asigna a p la dirección de lineav() */
(*p) (4); /* Llama a lineav() con un argumento 4 */
p=lineah; /* Asigna a p la dirección de lineah() */
(*p) (3); /* Llama a lineah() con un argumento 3 */

Lenguaje C. 47

Asignación dinámica de memoria


 Por medio de punteros se puede reservar o liberar
memoria dinámicamente, es decir, según se necesite.
 Para ello existen varias funciones estándares, de la
biblioteca <stdlib.h>
 La función malloc sirve para solicitar un bloque de
memoria del tamaño suministrado como parámetro.
Devuelve un puntero a la zona de memoria concedida:
void* malloc ( unsigned numero_de_bytes );
 El tamaño se especifica en bytes. Se garantiza que la
zona de memoria concedida no está ocupada por
ninguna otra variable ni otra zona devuelta por malloc.
 Si malloc es incapaz de conceder el bloque (p.ej. no hay
memoria suficiente), devuelve un puntero nulo.

Lenguaje C. 48

24
Punteros void *
 La función malloc devuelve un puntero
inespecífico, que no apunta a un tipo de
datos determinado.
 En C, estos punteros sin tipo se declaran
como void*
 Muchas funciones que devuelven
direcciones de memoria utilizan los
punteros void*.
 Un puntero void* puede convertirse a
cualquier otra clase de puntero:
char* ptr = (char*)malloc(1000);

Lenguaje C. 49

Operador sizeof
 El problema de malloc es conocer cuántos
bytes se quieren reservar. Si se quiere
reservar una zona para diez enteros, habrá
que multiplicar diez por el tamaño de un
entero.
 El tamaño en bytes de un elemento de tipo
T se obtiene con la expresión
sizeof ( T)
 El tamaño de un char siempre es 1 (uno).

Lenguaje C. 50

25
Función free()
 Cuando una zona de memoria reservada
con malloc ya no se necesita, puede ser
liberada mediante la función free.
void free (void* ptr);
 ptr es un puntero de cualquier tipo que
apunta a un área de memoria reservada
previamente con malloc.
 Si ptr apunta a una zona de memoria
indebida, los efectos pueden ser
desastrosos, igual que si se libera dos
veces la misma zona.
Lenguaje C. 51

Estructuras
 Una estructura es una colección de una o más variables,
posiblemente de tipos diferentes, agrupadas bajo un mismo
nombre de variable para una cuestión de manejo más
eficiente. Una estructura organiza tipos de datos distintos,
de manera que se puede hacer referencia a ellos como si
fuera una sola unidad.
 La definición de estructura forma una plantilla que puede
utilizarse para crear variables de estructura. Las variables
que componen la estructura se llaman elementos de la
estructura.
struct nombre {
def. var. 1;
def. var. 2;
------------
------------
};

Lenguaje C. 52

26
Estructuras
 Para crear una variable de estructura se
sigue el siguiente formato:
struct nombre_de_la_estructura
nombre_de_la_variable;
 Para acceder a un elemento o miembro de
la estructura se referencia con el nombre
de la estructura seguido por un punto y el
nombre del elemento.
nombre_de_la_estructura.nombre_del
_elemento

Lenguaje C. 53

Arrays de estructuras
 Para declarar un array de estructuras, primero hay
que definir una estructura y luego declarar una
variable array de ese tipo.
 Ejemplo:
struct dir {
char nombre[30];
char calle[35];
char ciudad[20];
char prov[15];
int dp;
};
struct dir lista[100];

Lenguaje C. 54

27
Arrays de estructuras
 Para acceder a un elemento o
miembro del array de estructura se
referencia:
variable[número].elemento
 Así por ejemplo, para asignar un
valor al elemento dp del array
número 5 del ejemplo anterior:
lista[5].dp=31010;
printf(“Código: %d”, lista[5].dp);
Lenguaje C. 55

Estructuras anidadas
 Un elemento de una estructura puede ser a su vez
otra estructura. Así pues, podemos declarar:
struct persona { struct empleado {
char nombre[30]; long dni;
char dirección[30]; long numss;
int edad; struct persona individuo;
}; };
 Definimos la variable:
struct empleado emp;
 Entonces para acceder a un elemento de una
estructura anidada sería:
emp.individuo.nombre;

Lenguaje C. 56

28
Punteros a estructuras
 Se declaran de la siguiente forma:
struct nombre_patrón
*nombre_puntero_a_estructura
 Ejemplo:
struct persona *ser;
 Para acceder a un elemento de un puntero a
estructura se realiza mediante el operador flecha
“->”.
nombre_puntero_a_estructura -> nombre_elemento
 Ejemplo:
mes=(ser->edad)*12;

Lenguaje C. 57

Enumeraciones
 Una enumeración es un conjunto de constantes
enteras con nombre, que especifica todos los valores
válidos que una variable de este tipo puede tener.
 Las enumeraciones se definen de forma parecida a las
estructuras. La forma general es:
enum etiqueta { lista_de_enumeraciones };
 Por ejemplo:
enum moneda { penique, niquel, diez_centavos,
cuarto, medio_dólar, dólar };
 Para declarar variables enumeraciones, es similar a
las variables estructuras.
enum moneda dinero;

Lenguaje C. 58

29
Enumeraciones
 La clave para entender la enumeración es que cada
uno de los símbolos corresponde a un valor entero.
Cada símbolo recibe un valor que es mayor en uno
que el símbolo que le precede.
 El valor del primer símbolo de la enumeración es cero.
 Se puede especificar el valor de cada uno o más
símbolos utilizando un inicializador. Esto se hace
siguiendo el símbolo con un signo igual y un valor
entero. A los símbolos que siguen a uno inicializado,
se les asignan valores mayores que el valor previo de
inicialización.

Lenguaje C. 59

Abreviación de los tipos de datos


 La palabra clave typedef permite crear un
tipo de dato con un nombre arbitrario
otorgado por el usuario.
 Realmente no se crea una nueva clase de
datos, sino que se define un nuevo nombre
para un tipo existente.
 El alcance depende de su definición:
 Definición interna: alcance a la propia función.
 Definición externa: alcance global.
 Por convenio se suelen emplear letras
mayúsculas para las definiciones.

Lenguaje C. 60

30
Ficheros
 Un fichero es una porción de almacenamiento,
generalmente en disco, con un nombre.
 Para el compilador C, un fichero es una estructura que
se reconoce por el nombre FILE. Luego, para definir
un fichero, nuestro programa debe incorporar la
sentencia:
FILE *nombre_de_la_variable_que_designa_al_fichero
 Como vemos se declara como un puntero a estructura
de fichero. Esta estructura está definida en el fichero
cabecera <stdio.h> por lo que será necesario incluir
al principio la sentencia:
#include <stdio.h>

Lenguaje C. 61

Funciones de acceso a ficheros


 fopen() Abrir un archivo
 flcose() Cerrar un archivo
 putc() Escribir un carácter en archivo
 getc() Leer un carácter de archivo
 putw() Escribir un entero en archivo
 getw() Leer un entero de archivo
 fseek() Posiciona puntero en archivo
 ftell() Da la posición del puntero
Lenguaje C. 62

31
Funciones de acceso a ficheros
 fwrite() Escribe datos en archivo
 fread() Lee datos de archivo
 fprintf() Escribe con formato en archivo
 fscanf() Lee de disco con formato
 feof() Detecta final de archivo
 ferror() Devuelve error de archivo
 rewind() Coloca puntero al principio de
archivo
 fgets() Lectura de cadenas de archivo
 fputs() Escritura de cadenas en archivo

Lenguaje C. 63

32

También podría gustarte