PDF de programación - SEMINARIO “C para programadores java” - Sesión 4

Imágen de pdf SEMINARIO “C para programadores java” - Sesión 4

SEMINARIO “C para programadores java” - Sesión 4gráfica de visualizaciones

Actualizado el 20 de Mayo del 2018 (Publicado el 18 de Enero del 2017)
1.164 visualizaciones desde el 18 de Enero del 2017
312,1 KB
13 paginas
Creado hace 15a (26/09/2008)
Algoritmos y Estructuras de Datos

2º de Ingeniería Informática, Curso 2008/2009

SEMINARIO “C para programadores java”
(este seminario forma parte de las actividades del proyecto piloto)



Sesión 4

Contenidos:


1. Manejo de ficheros.
2. Otras funciones de interés
3. El preprocesador de C
4. Programación modular
5. El programa make



1. Manejo de ficheros



librería stdio.h.

• Los tipos y funciones necesarios para el manejo de ficheros están definidos en la


• La librería stdio.h define el tipo FILE (ojo, en mayúsculas). Para usar

ficheros debemos usar punteros al tipo FILE.
#include <stdio.h>
FILE *f, *g;

• Operaciones con ficheros:

o Abrir un fichero: fopen
o Leer/escribir en un fichero:

 modo texto: fprintf, fscanf, getc, putc, fgets, fputs
 modo bineario/crudo: fread, fwrite

o Moverse a un punto: fseek
o Comprobar si se ha llegado al final: feof
o Cerrar un fichero: fclose
o NO EXISTE la serialización.



Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

2/13

• Abrir un fichero: fopen


FILE * fopen ( char *nombre , char *modo )

o Valor devuelto: devuelve un puntero al fichero abierto. Si no se puede
o Modo de acceso: de tipo cadena

abrir devuelve NULL.



Abrir sólo lectura
Crear y abrir para escritura
Abrir para añadir al final
Abrir para lectura/escritura
Crear y abrir para lectura/escritura
Abrir o crear para añadir

• Cerrar un fichero: fclose

int fclose ( FILE *fichero )

Fichero de texto

"r"
"w"
"a"
"r+"
"w+"
"a+"

Fichero binario

"rb"
"wb"
"ab"
"r+b"
"w+b"
"a+b"

• Leer/escribir en un fichero.
• fprintf, fscanf. Igual que printf y scanf pero en un fichero, que se pasa

como primer parámetro.
FILE *f;
int n;
f= fopen("prueba", "r+");
if (!f) {printf("Error. No puedo..."); return;}
fprintf(f, "Hola número %d", n);
fscanf(f, "%d", &n);
un fichero. Devuelven la constante EOF si hay un error.
char c;
while ((c= fgetc(f))!= EOF)
printf("Leído: %c\n", c);

• fgetc(FILE *f), fputc(int c, FILE *f). Leer o escribir un carácter en



• fgets, fputs. Leer o escribir una línea de texto de un fichero. Recordar que
scanf("%s", ...) lee una cadena pero acabando en el primer espacio en
blanco (tabulador, intro o espacio).

int fputs (char *cadena, FILE *fichero)

Escribe la cadena cadena hasta el final de la misma (carácter '\0'). Devuelve
EOF si ha ocurrido un error.

char *fgets (char *cadena, int max, FILE *fichero)

Lee la siguiente línea del fichero en cadena, acabando en un final de línea
(carácter '\n'). Devuelve NULL si ha ocurrido un error.

• fread, fwrite. Leer o escribir en un fichero en modo binario.



unsigned fread(void *ptr, unsigned size, unsigned n, FILE *fichero)

Lee de fichero bloque de size*n bytes y los almacena a partir de posición
apuntada por ptr. size es tamaño de tipo de datos a leer y n número de datos.
Devuelve el número de datos leídos (si no hay error, debería ser igual a n).

unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE *fichero)

Escribe en fichero bloque de size*n bytes, tomados a partir de posición
apuntada por ptr. size es el tamaño del tipo de datos a escribir y n el número
de datos. Devuelve número de datos escritos (si no hay error, igual a n).

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

3/13



• fseek. Moverse a un punto concreto de un fichero.

int fseek(FILE *fichero, long offset, int modo)

Permite moverse a una posición cualquiera dentro de un fichero. La posición
nueva está dada por offset (desplazamiento, en bytes) a partir de la posición
dada por modo: SEEK_SET (=0) desde el comienzo del fichero; SEEK_CUR (=1)
desde la posición actual; SEEK_END (=2) desde el final del fichero.
Función de consulta (dice la posición actual en el fichero):


long int ftell (FILE *fichero).

• feof. Comprobar si se ha llegado al final de un fichero.

int feof(FILE *fichero)
Devuelve true (valor distinto de 0) si hemos llegado al final del fichero o false
(valor 0) en caso contrario.




• Ejemplo.


#include <stdio.h>
#include <stdlib.h> /* Funciones rand(), srand() */

int main() {
FILE *e, *s;
int n, m, total= 0;
if (!(e= fopen("ejemplo.txt", "w"))) {
printf("Error. No se puede crear ejemplo.txt\n");
return 1;
}
srand(10);
fprintf(e, "%d %d\n", (int) (rand()*10.0/RAND_MAX),
(int) (rand()*10.0/RAND_MAX));
if (fclose(e)==EOF) {
printf("Error. No se puede cerrar ejemplo.txt\n");
return 2;
}
if (!(s= fopen("ejemplo.txt", "r"))) {
printf("Error. No se puede abrir ejemplo.txt\n");
return 3;
}
while (!feof(s)) {
total++;
if (fscanf(s, "%d %d\n", &n, &m)==2)
printf("R. Murcia: %d - At. Madrid: %d\n", n, m);
else
printf("El fichero no tiene el formato esperado\n");
}
printf("Realizados %d pronósticos.\n", total);
if (fclose(s)==EOF) {
printf("Error. No se cerrar el fichero ejemplo.txt\n");
return 4;
}
return 0;
}



• Probar distintas posibilidades en la línea señalada por:

"w" poner "a", "r", "r+", "w+", ... ¿Cuál es el resultado?







, en lugar de

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1



2. Otras funciones de interés


NOTA: referencia completa de funciones librería en la página web (libc.pdf).

• Con cadenas: string.h stdlib.h



4/13

int atoi(char *s)

unsigned strlen(char *s)

int strcmp(char *s1, char *s2)

Explicación
Devuelve la longitud de la cadena.

Nombre Sintaxis
strlen
strcpy char *strcpy(char *des, char *src) Copia la cadena src en des y devuelve des.
strcat char *strcat(char *des, char *src) Concatena a des la cadena src y devuelve des.
strcmp
Compara las dos cadenas. El resultado es: 0 si son
iguales; <0 si s1<s2 ; y >0 si s1>s2.
atoi
Convierte una cadena a un entero. Otras funciones
relacionadas: atol, atof, itoa, itol, ...

Ejemplo de uso:

#include<string.h>
#include<stdio.h>

void imprime_resultado_strcmp(int resultado_strcmp) {
if(!resultado_strcmp) {printf(“cadenas iguales\n”); return;}
if(resultado_strcmp>0) {printf(“cadena 1 mayor\n”); return;}
printf(“cadena 1 menor \n”);
}

main(){
int longitud = 20;
char cadenaA[longitud]=”Soy la cadena A”;
char cadenaB[longitud]=”Soy la cadena B”;

imprime_resultado_strcmp(strcmp(cadenaA,cadenaB);
imprime_resultado_strcmp(strcmp(cadenaB,cadenaA);

strcpy(cadenaA,cadenaB);
printf(“%s; %s\n”,cadenaA,cadenaB);

imprime_resultado_strcmp(strcmp(cadenaA,cadenaB);
}

• Con memoria: mem.h


string.h

Nombre Sintaxis
memcpy void *memcpy(void *dest, void
memcmp void *memcmp(void *s1, void
memset void *memset(void *s, int c,

*src , unsigned n)

Explicación
Copia n bytes desde la posición apuntada por src
hasta la apuntada por dest. Ver también
memmove.
Compara n bytes de s1 y de s2. El resultado es
como en strcmp.

*s2 , unsigned n)
unsigned n) Escribe en los n bytes de s el valor (byte) c.




• Otras: stdlib.h


Nombre
system
exit

Sintaxis
int system(char *command)

void exit(int status)



Explicación
Ejecuta un comando del sistema operativo.
Devuelve 0 si no hay error.
Cierra
la
ejecución del programa, devolviendo status.

ficheros y

termina

todos

los

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

5/13


• Con caracteres: ctype.h


Sintaxis

Nombre
isalpha
isupper
islower
isspace
toupper
tolower

int isalpha(int c)
int isupper(int c)
int isulower(int c)
int isspace(int c)
int toupper(int c)
int tolower(int c)

Explicación
Devuelve true si el carácter c es una letra.
Devuelve true si el carácter c es una letra mayúscula.
Devuelve true si el carácter c es una letra minúscula.
Devuelve true si el c es un espacio, tabulador o ‘\n’.
Devuelve el carácter c en mayúsculas.
Devuelve el carácter c en minúsculas.

3. El preprocesador de C



• El preprocesador:

o es parte del compilador, procesa los ficheros .c antes de compilar.
o admite varios comandos, que empiezan por #.



• Comando #define:

o Permite definir constantes, con o sin parámetros.
o Apariciones de la constante son sustituidas textualmente por su valor
o Estas constantes se llaman también macros.
o Macro sin parámetros.

 Normalmente se ponen en mayúsculas, para diferenciarlas de las

variables.
#define NOMBRE VALOR
#define PI 3.1415926
#define MAX_INT ((unsigned)(~0)>>1)
#define MENSAJE "Mensaje predefinido"



o Macro con parámetros.

 Es parecido a una función, pero sigue siendo una constante.
 Los parámetros no tienen tipo.
 La expresión se sustituye textualmente en tiempo de compilación.

#define NOMBRE(P1,P2,...,Pk) EXPRESION
#define CUADRADO(N) (N)*(N)
#define MAX(A,B) ((A)>(B)?(A):(B))
...
int i, j, k;
k= CUADRADO(i+1);
j= MAX(E*PI, k);
...

 Es recomendable usar paréntesis para evitar efectos indeseados.

¿Qué pasaría si pusiéramos: #define CUADRADO(N) N*N ?

o Es como el import de java.
o Incluye el contenido de un fichero en el punto donde aparece.
o Normalmente será un fichero de cabecera de una librería (extensión .h),

pero puede ser cualquier fichero.

#include <NOMBRE_FICHERO> → Para librerías de sistema
#include "NOMBRE_FICHERO" → Para librerías y ficheros propios


(busca primero en directorio actual)



o stdio.h → Librería estándar de entrada/salida
o stdlib.h → Librería de funciones y tipos estándar
o time.h → Funciones y tipos para manejo del tiempo
o math.h
  • Links de descarga
http://lwp-l.com/pdf1976

Comentarios de: SEMINARIO “C para programadores java” - Sesión 4 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad