|
91
|
Programación / Programación C/C++ / problemas con fseeks
|
en: 30 Enero 2014, 21:55 pm
|
Saludos, tengo problemas con unos fseeks que tengo dentro de un ciclo while que me lee un archivo, pero a la hora de imprimir el archivo no lo hace correctamente este es el codigo: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 8 typedef enum {INS,OP,DIR,MAQ,CALCULADO,CALCULAR,TOTAL} tabla; void buscarFinLinea(FILE *hc12); void listaTABOP(); char *Tabla_Operandos(FILE *hc12,int tabla); void ignorarEspacios(FILE *hc12); void quitarSaltosLinea(char *cadena); int main() { listaTABOP(); return 0; } void buscarFinLinea(FILE *hc12) { int car; while((car = fgetc(hc12 ))!= '\n') ; } void quitarSaltosLinea(char *c) { char *ptr; if(((ptr = strchr(c ,'\n'))!= NULL )||((ptr = strchr(c ,'\t'))!= NULL )||((ptr = strchr(c ,' '))!= NULL )) *ptr = '\0'; } void listaTABOP() { int car,i,pos,n; FILE *hc12; COD *ultimo = NULL; char *ins,*op,**dir,**maq,**cal,**x_cal,**sum; if((hc12 = fopen("Tabla_OP.txt","r"))!= NULL ) { while((car = fgetc(hc12 ))!= EOF ) { i = 0; ins = Tabla_Operandos(hc12,INS); ignorarEspacios(hc12); op = Tabla_Operandos(hc12,OP); buscarFinLinea(hc12); if((car = fgetc(hc12 )) != '\t') { n = 0; fseek(hc12 ,pos ,SEEK_SET ); ignorarEspacios(hc12); dir = (char**)malloc(sizeof(char*)); dir[i] = Tabla_Operandos(hc12,DIR); ignorarEspacios(hc12); maq = (char**)malloc(sizeof(char*)); maq[i] = Tabla_Operandos(hc12,MAQ); ignorarEspacios(hc12); cal = (char**)malloc(sizeof(char*)); cal[i] = Tabla_Operandos(hc12,CALCULADO); ignorarEspacios(hc12); x_cal = (char**)malloc(sizeof(char*)); x_cal[i] = Tabla_Operandos(hc12,CALCULAR); ignorarEspacios(hc12); sum = (char**)malloc(sizeof(char*)); sum[i] = Tabla_Operandos(hc12,TOTAL); buscarFinLinea(hc12); } else { n = 1; fseek(hc12 ,pos ,SEEK_SET ); dir = (char**)malloc(MAX *sizeof(char*)); maq = (char**)malloc(MAX *sizeof(char*)); cal = (char**)malloc(MAX *sizeof(char*)); x_cal = (char**)malloc(MAX *sizeof(char*)); sum = (char**)malloc(MAX *sizeof(char*)); do { ignorarEspacios(hc12); dir[i] = Tabla_Operandos(hc12,DIR); ignorarEspacios(hc12); maq[i] = Tabla_Operandos(hc12,MAQ); ignorarEspacios(hc12); cal[i] = Tabla_Operandos(hc12,CALCULADO); ignorarEspacios(hc12); x_cal[i] = Tabla_Operandos(hc12,CALCULAR); ignorarEspacios(hc12); sum[i] = Tabla_Operandos(hc12,TOTAL); buscarFinLinea(hc12); i++; }while((car = fgetc(hc12 )) == '\t'); } } } else printf("No se pudo abrir el archivo"); } void ignorarEspacios(FILE *hc12) { int car; do { }while(car == '\t' || car == ' '); } char *Tabla_Operandos(FILE *hc12,int tabla) { int car,lon = 0,pos; char *c; if((tabla==INS)||(tabla==OP)||(tabla==DIR)||(tabla==MAQ)||(tabla==CALCULADO)||(tabla==CALCULAR)) { do { lon++; }while(car != '\t' && car != EOF); } else { do { lon++; }while(car != '\n' && car != EOF); lon--; } fseek(hc12 ,pos ,SEEK_SET ); c = (char*)calloc((lon +1),sizeof(char)); quitarSaltosLinea(c); return c; }
[ y el archivo es quote]ABA NO INH 1806 2 0 2 ADCA SI IMM 89ii 1 1 2 DIR 99dd 1 1 2 EXT B9hhll 1 2 3 IDX A9xb 1 1 2 IDX1 A9xbff 1 2 3 IDX2 A9xbeeff 1 3 4 [D,IDX] A9xb 1 1 2 [IDX2] A9xbeeff 1 3 4[/quote] el problema es que cuando llega al codop ADCA no me imprime toda la linea solo me imprime []....[ADCA]...[SI]...[IMM]...[89ii]....[1]...[1] esto se arregla si le quito el primer fseek() que aparece en el while() de la funcion listaTABOP, pero si se lo quito ahora los codops siguientes al ADCA los imprime sin la primer letra, se la come,entonces como puedo arreglar este problema gracias
|
|
|
92
|
Programación / Programación C/C++ / se me borro el codigo
|
en: 27 Enero 2014, 05:08 am
|
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)) else buscarFinLinea(fd); break; case ESPACIOS_: case TABULADOR: etiqueta = "null"; printf("ETIQUETA = %s\n",etiqueta ); ignorarEspacios(fd); codop = Etiqueta_Codop_Operando(fd,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"; erroresCodop(codop); operando = "null"; printf("OPERANDO = %s\n\n",operando ); } else { ignorarEspacios(fd); codop = Etiqueta_Codop_Operando(fd,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 { }while(car == '\t' || car == ' '); } int verificarCombinacion(FILE *fd) { int car,combinacion; 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; if((linea == ETIQUETA)||(linea == CODOP)) { do { lon++; }while(car != '\t' && car != ' ' && car != '\n'); } else { do { lon++; }while(car != '\n'); } cadena = (char*)calloc((lon +1),sizeof(char)); 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; do { lon++; }while(car != '\t'); fseek(hc12 ,pos ,SEEK_SET ); 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 )); x->sig = NULL; return x; }
|
|
|
93
|
Programación / Programación C/C++ / problema con doble punteros
|
en: 26 Enero 2014, 23:11 pm
|
Saludos tengo una variable que es de tipo char** p, esto es para que sea un arreglo que contenga cadenas de tamańo variable y despues estas variables asignarselas al elemento nombre del mismo tipo que esta en una estructura, el problema es que el codigo me truena y no se por que #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 4 typedef struct { char **nombre; }CODOP; int main() { int tam,tam1,tam2,tam3,i; CODOP *x; char **p; x = (CODOP *)malloc(sizeof(CODOP )); p = (char**)malloc(MAX *sizeof(char*)); p[0] = "anita"; p[1] = "lava"; p[2] = "la"; p[3] = "tina"; x ->nombre = (char**)malloc(MAX *sizeof(char*)); x ->nombre [0] = (char*)malloc((tam +1)*sizeof(char)); x ->nombre [1] = (char*)malloc((tam1 +1)*sizeof(char)); x ->nombre [2] = (char*)malloc((tam2 +1)*sizeof(char)); x ->nombre [3] = (char*)malloc((tam3 +1)*sizeof(char)); for(i = 0;i < MAX;i++) return 0; }
gracias de antemano
|
|
|
94
|
Programación / Programación C/C++ / Process returned 0
|
en: 19 Enero 2014, 23:40 pm
|
Saludos, tengo entendido que al compilar un programa si te aparece un mensaje que diga Process returned 0 (0x0) quiere decir que compilo bien y sin errores, pero a mi en el siguiente codigo no me aparece ese mensaje, pero tampoco me aparecen mensajes de error o warnings, el programa tiene que leer un archivo y almacenar algunos datos en la variable que le corresponda, pero no se donde esta el error?? y por que el programa no termina como deberia int main() { int car,i; FILE *hc12; COD *cabeza = NULL,*ultimo; char *ins,*op,*dir[MAX],*maq[MAX],*cal[MAX],*x_cal[MAX],*suma[MAX]; if((hc12 = fopen("archivo.txt","r"))!= NULL ) { while((car = fgetc(hc12 ))!= EOF ) { i = 0; ins = Tabla_Operandos(hc12); ignorarEspacios(hc12); op = Tabla_Operandos(hc12); do { ignorarEspacios(hc12); dir[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); maq[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); cal[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); x_cal[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); suma[i] = Tabla_Operandos(hc12); buscarFinLinea(hc12); i++; }while(car == '\t'); } } return 0; } void buscarFinLinea(FILE *fd) { int car; while((car = fgetc(fd ))!= '\n') ; } void ignorarEspacios(FILE *fd) { int car; do { }while(car == '\t' || car == ' '); } char *Tabla_Operandos(FILE *hc12) { int car,lon = 0,pos; char *cadena; do { lon++; }while(car != '\t' && car != ' '); fseek(hc12 ,pos ,SEEK_SET ); fgets(cadena ,lon +1,hc12 ); quitarSaltosLinea(cadena); return cadena; }
de antemano gracias
|
|
|
95
|
Programación / Programación C/C++ / Lista con arrays
|
en: 15 Enero 2014, 19:51 pm
|
Saludos tengo el siguiente archivo de texto: ADCA****SI***IMM***89ii******1***1***2 **************DIR***99dd*****1***1***2 **************EXT***B9hhll****1***2***3 **************IDX***A9xb*****1***1***2 **************IDX1**A9xbff****1***2***3 **************IDX2**A9xbeeff**1***3***4 los * son espacios Y tengo que leer este archivo y que me guarde cada uno de los elementos en una variable para esto se me ocurrio que podia hacer una lista simplemente ligada que tuviera los elementos: codop = ADCA, operando = SI y para los 5 elementos restantes pense que podria hacerlos con arreglos, que direccionamiento fuera algo como: direc[0] = IMM direc[1] = DIR direc[2] = EXT direc[3] = IDX direc[4] = IDX1 y codigo maquina fuera: maq[0] = 89ii maq[1] = 99dd maq[2] = B9hhl .... .... esto seria un array de cadenas un char **direc y para los campos que tienen numeros seria un simple array, el codigo que tengo hecho es el siguiente pero me aparecen warnings que dicen assignment makes integer from pointer without a cast, y no entiendo por que,żżżcomo corregirlo??? #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct nodo { char *codigo; char *Operando; char **modo_direccionamiento; char **codigo_maquina; char *bytes_calculados; char *bytes_x_calcular; char *total_bytes; struct nodo *sig; }COD; void buscarFinLinea(FILE *hc12); void ignorarEspacios(FILE *hc12); char *Tabla_Operandos(FILE *hc12); void insertarFinal(char *ins,char *op,char **dir,char **maq,char *calculado,char *calcular,char *total,COD *ultimo,int i); COD *ultimoElemento(COD *cabeza); COD *crearNodo(char *ins,char *op,char **dir,char **maq,char *calculado,char *calcular,char *total,int i); void quitarSaltosLinea(char *cadena); int main() { COD *cabeza = NULL,*ultimo; FILE *hc12; int p,i,car; char *ins,*op,**dir,**maq,*calculado,*calcular,*total; if((hc12 = fopen("archivo.txt","r"))!= NULL ) { i = 0; while((car = fgetc(hc12 ))!= EOF ) { if(car != '\t') { ins = Tabla_Operandos(hc12); ignorarEspacios(hc12); op = Tabla_Operandos(hc12); ignorarEspacios(hc12); buscarFinLinea(hc12); if(car == '\t') { dir = (char**)malloc(8*sizeof(char)); dir[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); maq = (char**)malloc(8*sizeof(char)); maq[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); calculado = (char*)malloc(8*sizeof(char)); calculado[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); calcular = (char*)malloc(8*sizeof(char)); calcular[i] = Tabla_Operandos(hc12); ignorarEspacios(hc12); total = (char*)malloc(8*sizeof(char)); total[i] = Tabla_Operandos(hc12); buscarFinLinea(hc12); if(cabeza == NULL) //cabeza = crearNodo(ins,op,dir,maq,calculado,calcular,total,i); else { //ultimo = ultimoElemento(cabeza); //insertarFinal(ins,op,dir,maq,calculado,calcular,total,ultimo); } i++; } } } } else printf("No se pudo abrir archivo\n"); return 0; } void buscarFinLinea(FILE *fd) { int car; while((car = fgetc(fd ))!= '\n') ; } void ignorarEspacios(FILE *fd) { int car; do { }while(car == '\t' || car == ' '); } char *Tabla_Operandos(FILE *hc12) { int car,lon = 0,pos; char *cadena; do { lon++; }while(car != '\t'); fseek(hc12 ,pos ,SEEK_SET ); cadena = (char*)calloc((lon +1),sizeof(char)); fgets(cadena ,lon +1,hc12 ); quitarSaltosLinea(cadena); return cadena; } void quitarSaltosLinea(char *cadena) { char *ptr; if(((ptr =strchr(cadena ,'\n'))!=NULL )||((ptr =strchr(cadena ,'\t'))!=NULL )||((ptr =strchr(cadena ,' '))!=NULL )) *ptr = '\0'; }
de antemano gracias
|
|
|
96
|
Programación / Programación C/C++ / pasar por referencia un puntero
|
en: 12 Enero 2014, 03:15 am
|
Saludos, tengo unas dudas con respecto a por que en algunas ocasiones se tienen que pasar los punteros por referencias?? como cuando estas haciendo una lista enlazada y quieres insertar por la cabeza, por que tienes que pasar el puntero por referencia, que no se supone que el puntero ya almacena una direccion de memoria y que por lo tanto no es necesario pasarlo asi funcion(&cabeza).
gracias
|
|
|
97
|
Programación / Programación C/C++ / problema con lista indexada
|
en: 4 Enero 2014, 01:37 am
|
Saludos, estoy haciendo una lista simplemente ligada la cual tiene un campo indice para que cada que vaya agregando un elemento sepa cuantos elementos tiene. El problema es que cuando inicializo ese campo a 0 dentro de la structura me aparece un error typedef struct nodo { char *codigo; int indice = 0; struct nodo *sig; }NODO;
me dice que expected ':', ','...... or attribute before token gracias
|
|
|
98
|
Programación / Programación C/C++ / busqueda binaria en archivo
|
en: 31 Diciembre 2013, 22:54 pm
|
Saludos
tengo la siguiente tabla de instrucciones(de un ensamblador) capturada en un archivo txt:
codop ABA NO INH 1806 2 0 2 ABX NO IDX 1AE5 2 0 2 ABY NO IDX 19ED 2 0 2 ADC SI IMM 89ii 1 1 2 .. .. ..
y tengo por ejemplo un codigo de operacion que dice ABY, el cual lo tengo que buscar en este archivo, para ello pense que seria mas rapido si lo hago con una busqueda binaria, pero me queda la duda de si tengo primero que guardar solamente los codigos de operacion(ABA,ADB...) en una estructura de datos para despues poder hacer la busqueda, o si tengo que recorrer el archivo completo linea por linea para saber cuantos codops son?? no les pido que posteen el codigo solo que me dijeran cual podria ser la manera más optima y rapida de hacerlo
gracias
|
|
|
99
|
Programación / Programación C/C++ / funcion strcmpi()
|
en: 31 Diciembre 2013, 05:05 am
|
Saludos
tengo una duda con respecto a si la funcion strcmpi esta recomendada usarla o no. tengo entendido que a diferencia de strcmp, esta no es estandar, y si tengo que comparar dos cadenas pero sin diferenciar mayusculas de minusculas no se si hacerlo con esta funcion o hacerlo yo todo el procedimiento
de antemano gracias, y felices fiestas
|
|
|
100
|
Programación / Programación C/C++ / Programa identifique partes de una linea
|
en: 27 Diciembre 2013, 04:45 am
|
Saludos tengo un programa que me tiene que leer un archivo como por ejemplo: ;comentario numero 1 =TALLER= Et1 equ $ffFF dos LDAA @4732 ;comentario numero 2 ˇProgramacion! ;comentario numero 3 tres sWi x,5 Netq%23 RMB 556 Et12_xyz12 ADCA 1,PC y me tiene que imprimir sus partes COMENTARIO ETIQUETA = Et1 CODOP = equ OPERANDO = $ffFF ... ... y asi con todas las lineas el problema es que para las las etiquetas tengo dos reglas, una que su longitud no sea mayor a 8 caracteres y otra, que solo tenga letras, numeros y el guion bajo, si una etiqueta tiene otro caracter tengo que imprimir Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo pero para el Netq%23 me tendria que imprimir un mensaje de error, por que tiene el %, pero no imprime nada no entiendo por que #include <stdio.h> #include <stdlib.h> #include <string.h> #define LONG_ETIQUETA 8 #define LONG_CODOPS 5 typedef enum {FALSO,VERDADERO} booleano; typedef enum {ETIQUETA,CODOP,OPERANDO} linea; booleano esComentario(FILE *fd); char *Etiqueta_Codop_Operando(FILE *fd,int linea); void erroresEtiqueta(char *etiqueta); void buscarFinLinea(FILE *fd); void ignorarEspacios(FILE *fd); booleano esNumero(char cadena[],int i); booleano esLetra(char cadena[],int i); int main() { FILE *fd; int car; char *etiqueta,*codop,*operando; if((fd = fopen("P1ASM.txt","r"))!= NULL ) { while((car = fgetc(fd ))!= EOF ) { if(car == ';') { if(esComentario(fd)) else buscarFinLinea(fd); } else if((car >= 'A' && car <= 'Z')||(car >= 'a' && car <= 'z')) { etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA); printf("\nETIQUETA = %s\n",etiqueta ); erroresEtiqueta(etiqueta); ignorarEspacios(fd); codop = Etiqueta_Codop_Operando(fd,CODOP); ignorarEspacios(fd); operando = Etiqueta_Codop_Operando(fd,OPERANDO); printf("OPERANDO = %s\n\n",operando ); } } } 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 { }while(car == '\t' || car == ' '); } booleano esLetra(char *etiqueta,int i) { if((etiqueta[i] >= 'A' && etiqueta[i] <= 'Z')||(etiqueta[i] >= 'a' && etiqueta[i] <= 'z')) return 1; else return 0; } booleano esNumero(char *etiqueta,int i) { if(etiqueta[i] >= '0' && etiqueta[i] <= '9') return 1; else return 0; } char *Etiqueta_Codop_Operando(FILE *fd,int linea) { int car,lon = 0,pos; char *cadena; if(linea == ETIQUETA||linea == CODOP) { do { lon++; }while(car != '\t' && car != ' '); } else { while((car = fgetc(fd )) != '\n') lon++; } return cadena; } void erroresEtiqueta(char *etiqueta) { int tam,i,caracterInvalido = 0; if(tam-1 > LONG_ETIQUETA) printf("\tError:la longitud maxima de una etiqueta es de ocho caracteres\n"); for(i = 0;(i < tam)&&(caracterInvalido);i++) { if((!esLetra(etiqueta,i))&&(!esNumero(etiqueta,i))&&(!etiqueta[i] == '_')) caracterInvalido = 1; } if(caracterInvalido) printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n"); }
el resto del codigo funciona bien, solo tengo problema con esa parte gracias
|
|
|
|
|
|
|