Programa identifique partes de una linea

Iniciado por m@o_614, 27 Diciembre 2013, 04:45 AM

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

m@o_614

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))
                   printf("COMENTARIO\n");
                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);
                printf("CODOP = %s\n",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
    {
        car = fgetc(fd);
    }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;
    fseek(fd,-1,SEEK_CUR);
    pos = ftell(fd);
    if(linea == ETIQUETA||linea == CODOP)
    {
        do
        {
            car = fgetc(fd);
            lon++;
        }while(car != '\t' && car != ' ');
    }
    else
    {
        while((car = fgetc(fd)) != '\n')
           lon++;
    }
    cadena = calloc((lon+1));
    fseek(fd,pos,SEEK_SET);
    fgets(cadena,lon+1,fd);
    return cadena;
}

void erroresEtiqueta(char *etiqueta)
{
    int tam,i,caracterInvalido = 0;
    tam = strlen(etiqueta);
    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

leosansan

#1
Creo que es más útil el uso de isalpha e isdigit para saber si son alfabéticos o números los caracteres.

Respecto al código sólo vi un fallo en las funciones esLetra y esNumero, ya que su argumento no es una cadena sino un caracter.

En fin, supongo que esta es la salida que buscabas:


Citar
Et1
equ
CODOP = equ
$ffFF
OPERANDO = $ffFF

dos
LDAA
CODOP = LDAA
@4732
OPERANDO = @4732

COMENTARIO
COMENTARIO
tres
sWi
CODOP = sWi
x,5
OPERANDO = x,5

Netq%23
Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el gui
on bajo
RMB
CODOP = RMB
556
OPERANDO = 556

Et12_xyz12
       Error:la longitud maxima de una etiqueta es de ocho caracteres
ADCA
CODOP = ADCA

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.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 caracter);
booleano esLetra(char caracter);

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))
                  printf("COMENTARIO\n");
               else
                  buscarFinLinea(fd);
           }
           else if((isalpha(car)))
           {
               etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
               erroresEtiqueta(etiqueta);
               ignorarEspacios(fd);
               codop = Etiqueta_Codop_Operando(fd,CODOP);
               printf("CODOP = %s\n",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
   {
       car = fgetc(fd);
   }while(car == '\t' || car == ' ');
}

booleano esLetra(char caracter)
{
   if (isalpha(caracter))
       return 1;
   else
      return 0;
}

booleano esNumero(char caracter)
{
   if (isdigit(caracter))
       return 1;
   else
      return 0;
}

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

void erroresEtiqueta(char *etiqueta)
{
   int tam,i,caracterInvalido = 0;
   tam = strlen(etiqueta);
   if(tam-1 > LONG_ETIQUETA)
      printf("\tError:la longitud maxima de una etiqueta es de ocho caracteres\n");
   for(i = 0;i<tam-1;i++)
   {
       if(!(esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&& (etiqueta[i] != '_')){

           caracterInvalido = 1;
       }

   }
   if(caracterInvalido==1)
      printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!



m@o_614

#2
Gracias leosansan por tu respuesta, yo crei que al hacer esto:

esLetra(etiqueta,i) le estaba enviando un solo elemento de la cadena, lo que equivaldria a un caracter, para ya despues en la funcion poder hacer esto:

if((etiqueta[i] >= 'A' && etiqueta[i] <= 'Z')||(etiqueta[i] >= 'a' && etiqueta[i] <= 'z'))
      return 1;



pero me queda una duda, si yo por ejemplo le agregara la regla de: los codigos de operacion deben iniciar con letra a los CODOPS

e hiciera una funcion para verificar los errores de CODOPS, en este caso el     if(!esLetra(codop,i)) si funciona y si me imprime el mensaje de error, cosa que no hace con la verificacion de errores en etiquetas por que es esto?

void erroresCodop(char *codop)
{
   int tam,i = 0;
   tam = strlen(codop);
   if(tam-1 > LONG_CODOP)
      printf("\tError:la longitud maxima de un codigo de operacion es de 5 caracteres\n");
   if(!esLetra(codop,i))
      printf("\tError:los codigos de operacion deben iniciar con letra\n");
}


el codigo completo era este:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LONG_ETIQUETA 8
#define LONG_CODOP 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 erroresCodop(char *codop);
void buscarFinLinea(FILE *fd);
void ignorarEspacios(FILE *fd);
booleano esNumero(char caracter[],int i);
booleano esLetra(char caracter[],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))
                   printf("COMENTARIO\n");
                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);
                printf("CODOP = %s\n",codop);
                erroresCodop(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
    {
        car = fgetc(fd);
    }while(car == '\t' || car == ' ');
}

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

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

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

void erroresEtiqueta(char *etiqueta)
{
    int tam,i = 0,caracterInvalido = 0;
    tam = strlen(etiqueta);
    if(tam-1 > LONG_ETIQUETA)
       printf("\tError:la longitud maxima de una etiqueta es de 8 caracteres\n");
    for(i = 0;(i < tam)&&(caracterInvalido);i++)
    {
        if((!esLetra(etiqueta,i))&&(!esNumero(etiqueta,i))&&(etiqueta[i] != '_'))
           caracterInvalido = 1;
    }
    if(caracterInvalido == 1)
       printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}

void erroresCodop(char *codop)
{
    int tam,i = 0;
    tam = strlen(codop);
    if(tam-1 > LONG_CODOP)
       printf("\tError:la longitud maxima de un codigo de operacion es de 5 caracteres\n");
    if(!esLetra(codop,i))
       printf("\tError:los codigos de operacion deben iniciar con letra\n");
}


gracias y felices fiestas

leosansan


Mejor ves la salida al problema que planteas, donde he modificado lo del carácter y en calloc he añadido el segundo argumento: size  char =1. También cambié en el fichero original el COPS swi a 1swi para que cante el error:



Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.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 caracter);
booleano esLetra(char caracter);
void erroresCodop(char *codop);

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))
                   printf("COMENTARIO\n");
                else
                   buscarFinLinea(fd);
            }
            else if((isalpha(car)))
            {
                etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
                printf("\nETIQUETA = %s\n",etiqueta);
                erroresEtiqueta(etiqueta);
                ignorarEspacios(fd);
                codop = Etiqueta_Codop_Operando(fd,CODOP);
                printf("CODOP = %s\n",codop);
                erroresCodop(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
    {
        car = fgetc(fd);
    }while(car == '\t' || car == ' ');
}

booleano esLetra(char caracter)
{
    if (isalpha(caracter))
        return 1;
    else
       return 0;
}

booleano esNumero(char caracter)
{
    if (isdigit(caracter))
        return 1;
    else
       return 0;
}

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

void erroresEtiqueta(char *etiqueta)
{
    int tam,i,caracterInvalido = 0;
    tam = strlen(etiqueta);
    if(tam-1 > LONG_ETIQUETA)
       printf("\tError:la longitud maxima de una etiqueta es de ocho caracteres\n");
    for(i = 0;i<tam-1;i++)
    {
        if(!(esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&& (etiqueta[i] != '_')){

            caracterInvalido = 1;
        }

    }
    if(caracterInvalido==1)
       printf("Error:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}
void erroresCodop(char *codop)
{
    int tam,i = 0;
    tam = strlen(codop);
    if(tam-1 > LONG_CODOPS)
       printf("\tError:la longitud maxima de un codigo de operacion es de 5 caracteres\n");
    if(!esLetra(codop[0]))
       printf("\tError:los codigos de operacion deben iniciar con letra\n");
}


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!




m@o_614

ya supe donde estaba el error, en la bandera esEtiqueta, tuve que inicializarla a 1 porque si no no funcionaba y tambien por ejemplo en la etiqueta dos tambien me estaba leyendo dos mas un espacio en blanco y por eso me aparecia que todas las etiquetas tenian error, porque ese ' ' no es ni letra, ni digito ni guion bajo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LONG_ETIQUETA 8
#define LONG_CODOP 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 erroresCodop(char *codop);
void buscarFinLinea(FILE *fd);
void ignorarEspacios(FILE *fd);
booleano esNumero(char caracter);
booleano esLetra(char caracter);

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))
                   printf("COMENTARIO\n");
                else
                   buscarFinLinea(fd);
            }
            else if(esLetra(car))
            {
                etiqueta = Etiqueta_Codop_Operando(fd,ETIQUETA);
                printf("\nETIQUETA = %s\n",etiqueta);
                erroresEtiqueta(etiqueta);
                ignorarEspacios(fd);
                codop = Etiqueta_Codop_Operando(fd,CODOP);
                printf("CODOP = %s\n",codop);
                erroresCodop(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
    {
        car = fgetc(fd);
    }while(car == '\t' || car == ' ');
}

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;
    fseek(fd,-1,SEEK_CUR);
    pos = ftell(fd);
    if(linea == ETIQUETA||linea == CODOP)
    {
        do
        {
            car = fgetc(fd);
            lon++;
        }while(car != '\t' && car != ' ');
    }
    else
    {
        while((car = fgetc(fd)) != '\n')
           lon++;
    }
    cadena = (char*)calloc((lon+1),sizeof(char));
    fseek(fd,pos,SEEK_SET);
    fgets(cadena,lon+1,fd);
    return cadena;
}

void erroresEtiqueta(char *etiqueta)
{
    int tam,i = 0,esEtiqueta = 1;
    tam = strlen(etiqueta);
    if(tam-1 > LONG_ETIQUETA)
       printf("\tError:la longitud maxima de una etiqueta es de 8 caracteres\n");
    for(i = 0;(i < tam-1)&&(esEtiqueta);i++)
    {
        if((!esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&&(etiqueta[i] != '_'))
           esEtiqueta = 0;
    }
    if(!esEtiqueta)
       printf("\tError:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}

void erroresCodop(char *codop)
{
    int tam,i = 0,esCodop = 1,punto = 0;
    tam = strlen(codop);
    if(tam-1 > LONG_CODOP)
       printf("\tError:la longitud maxima de un codigo de operacion es de 5 caracteres\n");
    if(!esLetra(codop[i]))
        printf("\tError:los codigos de operacion deben iniciar con letra\n");
    else
    {
        for(i = 1;(i < tam-1)&&(esCodop)&&(punto>=0&&punto<=1);i++)
        {
            if((!esLetra(codop[i]))&&(codop[i] != '.'))
               esCodop = 0;
            else if(codop[i] == '.')
               punto++;
        }
        if(!esCodop)
           printf("\tError:los caracteres validos en los codigos de operacion son letras y el caracter punto\n");
        if(punto > 1)
           printf("\tError:los codigos de operacion no pueden tener mas de un punto\n");
    }
}


pero yo todavia no entiendo por que no puedo inicializar la bandera con 0 aqui ya no hace lo que le pido

void erroresEtiqueta(char *etiqueta)
{
    int tam,i = 0,esEtiqueta = 0;
    tam = strlen(etiqueta);
    if(tam-1 > LONG_ETIQUETA)
       printf("\tError:la longitud maxima de una etiqueta es de 8 caracteres\n");
    for(i = 0;(i < tam-1)&&(esEtiqueta);i++)
    {
        if((!esLetra(etiqueta[i]))&&(!esNumero(etiqueta[i]))&&(etiqueta[i] != '_'))
           esEtiqueta = 1;
    }
    if(esEtiqueta == 1)
       printf("\tError:los caracteres validos en las etiquetas son letras, digitos(0..9) y el guion bajo\n");
}



leosansan

Ya no sé que decir, tal como te lo puse en el post anterior funcionaba O.K.

Es como el no uso que haces de las funciones que te indiqué para saber si los caracteres son alfabéticos o numérico. Son más "elegantes/profesionales" que las de andar viendo si el código ASCII está entre tales y cuales números.
Y por cierto, sizeof(char) en cualquier plataforma vale 1, que es lo que puse en mi código. Míralo bien.


¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes: