se me borro el codigo

Iniciado por m@o_614, 27 Enero 2014, 05:08 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos, tengo un problema con el siguiente codigo que creo que ya habia posteado antes, pero lo que pasa es que de repente la pantalla se me congelo y cuando reinicie la maquina ya no tenia codigo, se me borro todo y ahora estoy empezandolo a hacer de nuevo todo, el codigo me lee de un archivo todos los codigos de operacion y me hace una lista simplemente ligada, esto si funciona bien, pero a la hora de que le pido que busque un codigo de operacion en la lista siempre me imprime que no lo encuentra, y no entiendo por que? si alguien me pudiera ayudar se lo agradeceria mucho

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LONG_ETIQUETA 8
#define LONG_CODOP 5
#define COMENTARIO ';'
#define TABULADOR '\t'
#define ESPACIOS_ ' '
#define MAX 8

typedef enum {FALSO,VERDADERO} booleano;
typedef enum {ETIQUETA,CODOP,OPERANDO} linea;

typedef struct nodo
{
    char *instruccion;
    struct nodo *sig;
}COD;

void imprimirLista(COD *cabeza);
int verificarCombinacion(FILE *fd);
booleano esComentario(FILE *fd);
char *Etiqueta_Codop_Operando(FILE *fd,int linea);
void ultimaLinea(char *codop);
void buscarFinLinea(FILE *fd);
void ignorarEspacios(FILE *fd);
void listaTABOP(COD **cabeza);
COD *ultimoElemento(COD **cabeza);
COD *crearNodo(char *ins);
void insertarFinal(char *ins,COD *ultimo);
char *Tabla_Operandos(FILE *hc12);
COD *buscarCodop(COD *cabeza,char *codop);
void quitarSaltosLinea(char *cadena);
booleano esNumero(char caracter);
booleano esLetra(char caracter);

int main()
{
    FILE *fd;
    int car,combinacion;
    COD *cabeza = NULL,*encontrado = NULL;
    char *etiqueta,*codop,*operando;
    listaTABOP(&cabeza);
    //imprimirLista(cabeza);
    if((fd = fopen("ejemplo_errores.txt","r"))!= NULL)
    {
        while((car = fgetc(fd))!= EOF)
        {
            switch(car)
            {
                case COMENTARIO:
                   if(esComentario(fd))
                      printf("COMENTARIO\n\n");
                   else
                      buscarFinLinea(fd);
                   break;
                case ESPACIOS_:
                case TABULADOR:
                   etiqueta = "null";
                   printf("ETIQUETA = %s\n",etiqueta);
                   ignorarEspacios(fd);
                   codop = Etiqueta_Codop_Operando(fd,CODOP);
                   printf("CODOP = %s\n",codop);
                   erroresCodop(codop);
                   combinacion = verificarCombinacion(fd);
                   if(combinacion == 2)
                   {
                       operando = "null";
                       printf("OPERANDO = %s\n\n",operando);
                   }
                   else
                   {
                       ignorarEspacios(fd);
                       operando = Etiqueta_Codop_Operando(fd,OPERANDO);
                       printf("OPERANDO = %s\n\n",operando);
                   }
                   break;
                default:
                   etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
                   printf("ETIQUETA = %s\n",etiqueta);
                   erroresEtiqueta(etiqueta);
                   combinacion = verificarCombinacion(fd);
                   if(combinacion == 2)
                   {
                       codop = "null";
                       printf("CODOP = %s\n",codop);
                       erroresCodop(codop);
                       operando = "null";
                       printf("OPERANDO = %s\n\n",operando);
                   }
                   else
                   {
                       ignorarEspacios(fd);
                       codop = Etiqueta_Codop_Operando(fd,CODOP);
                       printf("CODOP = %s\n",codop);
                       erroresCodop(codop);
                       combinacion = verificarCombinacion(fd);
                       if(combinacion == 2)
                       {
                           operando = "null";
                           printf("OPERANDO = %s\n\n",operando);
                       }
                       else
                       {
                           ignorarEspacios(fd);
                           operando = Etiqueta_Codop_Operando(fd,OPERANDO);
                           printf("OPERANDO = %s\n\n",operando);
                       }
                   }
                   break;
            }
            if((encontrado = buscarCodop(cabeza,codop)) == NULL)
               printf("NO SE ENCONTRO EL CODOP DE OPERACION\n");
        }
        ultimaLinea(codop);
    }
    else
       printf("No se pudo abrir el archivo");
    return 0;
}

booleano esComentario(FILE *fd)
{
    int car;
    while((car = fgetc(fd))!= '\n')
    {
        if(car == ';')
           return 0;
    }
    return 1;
}

void buscarFinLinea(FILE *fd)
{
    int car;
    while((car = fgetc(fd))!= '\n')
        ;
}

void ignorarEspacios(FILE *fd)
{
    int car;
    do
    {
        car = fgetc(fd);
    }while(car == '\t' || car == ' ');
}

int verificarCombinacion(FILE *fd)
{
    int car,combinacion;
    fseek(fd,-1,SEEK_CUR);
    if((car = fgetc(fd))== '\n')
       combinacion = 2;
    else
       combinacion = 1;
    return combinacion;
}

booleano esLetra(char caracter)
{
    if((caracter >= 'A' && caracter <= 'Z')||(caracter >= 'a' && caracter <= 'z'))
       return 1;
    else
       return 0;
}

booleano esNumero(char caracter)
{
    if(caracter >= '0' && caracter <= '9')
       return 1;
    else
       return 0;
}

char *Etiqueta_Codop_Operando(FILE *fd,int linea)
{
    int car,lon = 0,pos;
    char *cadena,*ptr;
    fseek(fd,-1,SEEK_CUR);
    pos = ftell(fd);
    if((linea == ETIQUETA)||(linea == CODOP))
    {
        do
        {
            car = fgetc(fd);
            lon++;
        }while(car != '\t' && car != ' ' && car != '\n');
    }
    else
    {
        do
        {
            car = fgetc(fd);
            lon++;
        }while(car != '\n');
    }
    cadena = (char*)calloc((lon+1),sizeof(char));
    fseek(fd,pos,SEEK_SET);
    fgets(cadena,lon+1,fd);
    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
       *ptr = '\0';
    return cadena;
}

void ultimaLinea(char *codop)
{
    if((strcmp(codop,"end")) != 0)
       printf("Error:No se encontro el END.\n");
}

void quitarSaltosLinea(char *cadena)
{
    char *ptr;
    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
       *ptr = '\0';
}

void listaTABOP(COD **cabeza)
{
    int car;
    FILE *hc12;
    COD *ultimo = NULL;
    char *ins;
    if((hc12 = fopen("Tabla_OP.txt","r"))!= NULL)
    {
         while((car = fgetc(hc12))!= EOF)
        {
            if(car != '\t')
            {
                ins = Tabla_Operandos(hc12);
                buscarFinLinea(hc12);
                if(*cabeza == NULL)
                   *cabeza = crearNodo(ins);
                else
                {
                    ultimo = ultimoElemento(cabeza);
                    insertarFinal(ins,ultimo);
                }
            }
            else
               buscarFinLinea(hc12);
        }
    }
    else
       printf("No se pudo abrir el archivo");
}

COD *ultimoElemento(COD **cabeza)
{
    COD *ptr;
    ptr = *cabeza;
    while(ptr->sig != NULL)
       ptr = ptr->sig;
    return ptr;
}

char *Tabla_Operandos(FILE *hc12)
{
    int car,lon = 0,pos;
    char *cadena;
    fseek(hc12,-1,SEEK_CUR);
    pos = ftell(hc12);
        do
        {
            car = fgetc(hc12);
            lon++;
        }while(car != '\t');
    fseek(hc12,pos,SEEK_SET);
    cadena = calloc((lon+1));
    fgets(cadena,lon+1,hc12);
    quitarSaltosLinea(cadena);
    return cadena;
}

COD *buscarCodop(COD *cabeza,char *codop)
{
    COD *ptr;
    for(ptr = cabeza;ptr != NULL;ptr = ptr->sig)
    {
        if(ptr->instruccion == codop)
           return ptr;
    }
    return NULL;
}

void insertarFinal(char *ins,COD *ultimo)
{
    ultimo->sig = crearNodo(ins);
    ultimo->sig->sig = NULL;
    ultimo = ultimo->sig;
}

COD *crearNodo(char *ins)
{
    int tam;
    COD *x;
    x = (COD*)malloc(sizeof(COD));
    tam = strlen(ins);
    x->instruccion = malloc(tam);
    strcpy(x->instruccion,ins);
    x->sig = NULL;
    return x;
}