Você está na página 1de 12

Resumen de programacin en C

Rafael Palacios

Estructura general de un programa C

/* Descripcin Nombre Fecha */

Cabecera del archivo

Todos los parmetros

#include <stdio.h> #define N 100 typedef struct { double x,y; } t_punto;

Todos los include necesarios

Definiciones de tipos de datos, (importa el orden)

Prototipos

double Distancia(t_punto p1, t_punto p2); int main(void) {

Funcin main y otras funciones

Lectura de variables con control de errores


do { printf("Dame un valor entero positivo y menor que 100: "); scanf("%d", &a); if (a<0 || a>=100) {

printf("Error, vuelve a intentarlo.\n"); } } while (a<0 || a>=100);


La misma condicin de error

Este cdigo cumplen lo siguiente: Slo se muestra el mensaje de error en caso de error La pregunta se repite hasta que el valor sea correcto Slo hay un scanf (se minimiza la posibilidad de error de programacin)

Asignacin de memoria dinmica


(Estructura anloga a la apertura/cierre de archivos)

pi=(int *)calloc(n, sizeof(int)); //asigno n elementos tipo int if (pi==NULL) {

printf("Error al asignar memoria\n"); } else {

pi[3]=7;

//se utiliza igual que un vector esttico

free(pi); }

Este cdigo cumplen lo siguiente: Slo se accede a la memoria si ha sido asignada correctamente. Si falla la asignacin, se da un mensaje de error y la memoria ni se utiliza ni se intenta liberar. La memoria se libera con free cuando ya no hace falta.

Abrir y cerrar archivos


(Estructura anloga a la asignacin dinmica de memoria)

pf=fopen("miarchivo.txt","w"); //abro el archivo if (fp==NULL) {

printf("Error al abrir miarchivo.txt\n"); } else {

fprintf(fp,"Resultado=%f\n",res);

fclose(fp); //if (fclose(fp)!=0) printf("Error al cerrar\n"); }

Este cdigo cumplen lo siguiente: Slo se accede al archivo si se ha abierto correctamente Si falla la apertura, se da un mensaje de error y el archivo ni se utiliza ni se intenta cerrar. El archivo se cierra con fclose al terminar

Contar registros de un archivo


(Estructura anloga a la lectura de variables con control de rango)

int ctrl; t_registro aux; int n;

//variable para control de lectura //estructura con los campos necesarios //nmero de registros

n=0; do { ctrl=fread(&aux, sizeof(aux),1,fp); if (ctrl==1) n++; } } while (ctrl==1); {

Archivo Binario

Este cdigo cumplen lo siguiente: Slo incrementa el contador cuando se garantiza que la lectura ha funcionado El bucle termina tanto si falla la lectura o si se alcanza el final del archivo.

Contar registros de un archivo


(Estructura anloga a la lectura de variables con control de rango)

int ctrl; int n;

//variable para control de lectura //nmero de registros

char nombre[15], int edad, float peso; //datos del archivo

n=0; do { ctrl=fscanf(fp,%s%d%f, nombre, &edad, &peso); if (ctrl==3) n++; } } while (ctrl==3); {

Archivo de texto

//como leo 3 la variables fscanf devuelve 3

Este cdigo cumplen lo siguiente: Slo incrementa el contador cuando se garantiza que la lectura ha funcionado. El bucle termina tanto si falla la lectura como si se alcanza el final del archivo. Si falla la lectura de cualquiera de las tres variables, termina el bucle.

Asignacin a 2 punteros
(Estructura anloga a la apertura/cierre de 2 archivos)

p1=(int *)calloc(n, sizeof(int)); //asigno n elementos tipo int p2=(int *)calloc(m, sizeof(int)); if (p1==NULL || p2==NULL) {

printf("Error al asignar memoria\n"); if (p1!=NULL) free(p1); if (p2!=NULL) free(p2); } else {

p1[3]=7;

//se utiliza igual que un vector esttico

free(p1); free(p2); }

Asignacin a 2 punteros (otra versin)


p1=(int *)calloc(n, sizeof(int)); //asigno n elementos tipo int p2=(int *)calloc(m, sizeof(int)); if (p1==NULL || p2==NULL) {

printf("Error al asignar memoria\n"); } else {

p1[3]=7;

//se utiliza igual que un vector esttico

} if (p1!=NULL) free(p1); if (p2!=NULL) free(p2);

Abrir y cerrar 2 archivos


(Estructura anloga a la asignacin dinmica de memoria)

pf1=fopen("origen.dat","rb"); //abro el archivo pf2=fopen("destino.dat","wb"); //abro el archivo if (fp1==NULL || fp2==NULL) { printf("Error al abrir algn archivo\n"); if (fp1!=NULL) fclose(fp1); //imposible que falle fclose if (fp2!=NULL) fclose(fp2); } else { do { Ejemplo de utilizacin ctrl=fread(&tmp,sizeof(tmp),1,fp1); de los ficheros if (ctrl==1) { fwrite(&tmp,sizeof(tmp),1,fp2); } } while (ctrl==1); fclose(fp1); fclose(fp1); }

Funciones para leer estructuras

t_persona p; //una estructura t_persona vec[N]; //vector de estructuras

PROTOTIPO
t_persona Leer1(void); void Leer2(t_persona *pp); //con control de error int Leer3(t_persona *pp); int LeerVec1(t_persona v[]);
void LeerVec2(t_persona v[],int n);

EJEMPLO DE LLAMADA
p=Leer(); Leer(&p); ctrl=Leer(&p);

n=LeerVec1(vec); //sin [] & * LeerVec2(vec,n);

Funciones para leer archivos

t_persona p; FILE *fp

//una estructura //fichero

PROTOTIPO
t_persona Leer1(FILE *f);

EJEMPLO DE LLAMADA
p=Leer(fp); //fp est abierto en
main

t_persona Buscar(FILE *f,char s[ ]);

p=Buscar(fp,"ana"); //fp est


abierto. Se necesita rewind en la funcin

t_persona Buscar(char s[ ]);

p=Buscar("ana"); //La funcin


abre y cierra el fichero cada vez

Con control de error


int Buscar(FILE *f, char s[], t_persona *pp); int Buscar(char s[], t_persona *pp);

Você também pode gostar