Resultados 1 al 4 de 4

Tema: error strcmp y estructura

  1. #1 error strcmp y estructura 
    Iniciado
    Fecha de ingreso
    Feb 2010
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    hola wenas mi problema es que al compilar en c++ me da dos errores, uno en el strcmp y otro que me dice nose q de una estructura y he estado mirando que puede ser el error pero no lo encuentro y me esta volviendo loco ya...haber si alguien consigue encontrarlo...muxas gracias



    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <limits.h>


    #define MAX_CAMARAS 15
    #define LON_PARTE 80
    #define MAX_NOMBRE 20


    /* Tipos de datos necesarios. */

    typedef char TCadena[LON_PARTE];

    typedef int Tidentificador[];

    typedef struct
    {
    char zona[MAX_NOMBRE];
    char trafico_inicial[LON_PARTE];
    char trafico_actualizado[LON_PARTE];
    Tidentificador identificador;
    }Tmaquinas;

    typedef struct
    {
    Tmaquinas maquinas;
    int ocupado;
    }Tlugar;

    typedef Tlugar Tcamaras[MAX_CAMARAS];

    ////////////*prototipos de las funciones*/////////////////////

    void inicializar(Tcamaras camaras);
    void menu();
    void crearcamara(Tcamaras camaras);
    void decirsitiovacio(const Tcamaras camaras,int*sitio);
    void buscarid(Tcamaras camaras,Tidentificador id_comp,int *comp,int *pos);
    void introducirdatoscam(Tmaquinas * maquinas);
    void leer_real ( const char mensaje[], double *resultado );
    void leer_cadena ( const char mensaje[], const int tam, char resultado[] );
    void leer_entero ( const char mensaje[], int *dato );///*leer un numero entero*///


    /************************************************** *********************
    *************************PROGRAMA PRINCIPAL*****************************
    ************************************************** *********************/

    int main()
    {
    Tcamaras camaras;
    int opcion;

    inicializar(camaras);
    do
    { menu();
    fscanf (stdin,"%d",&opcion);
    switch(opcion)
    {
    case 1:
    crearcamara(camaras);/*insertar empleado*/
    break;

    case 2:
    /*modificar datos*/
    break;

    case 3:
    /*dar de baja*/
    break;

    case 4:
    /*listar todos lo datos*/
    break;

    case 5:
    fprintf (stdout,"Hasta luego\n");
    break;

    default:
    fprintf (stdout,"Introduzca una opcion correcta\n");
    }
    }
    while (opcion!=5);
    return 0;
    }

    ///////////////////////*INICIALIZAR VACIO*////////////////////////

    void inicializar(Tcamaras camaras)
    {
    int i;

    i=0;
    while(i<25)
    {
    camaras[i].ocupado=0;
    i=i+1;
    }
    }

    /////////////////*MENU DE PRESENTACION*////////////////////////

    void menu()
    {
    fprintf (stdout,"\nBase de datos de empleados\n");
    fprintf (stdout,"1. dar de alta una nueva camara\n");
    fprintf (stdout,"2. Modificar\n");
    fprintf (stdout,"3. Dar de baja \n");
    fprintf (stdout,"4. Listar \n");
    fprintf (stdout,"5. Salir del programa\n");
    fprintf (stdout,"Seleccione opcion (1, 2, 3, 4, 5): ");
    }

    ///////////////////*DAR DE ALTA A UNA CAMARA*///////////////////////

    void crearcamara(Tcamaras camaras)
    {
    int pos;
    Tidentificador identifica;/*dice storage size"identifica isnt know*/
    int comp;
    int pos_comp;

    decirsitiovacio(camaras,&pos);
    if(pos != -1)
    {
    leer_entero("Introduzca el identificador: ",identifica);
    buscarid(camaras,identifica,&comp,&pos_comp);
    if (comp!=0)
    {
    introducirdatoscam(&camaras[pos].maquinas);
    camaras[pos].ocupado=1;
    }
    if (comp==0)
    {
    fprintf (stdout,"Ya existe el identificador introducido\n");
    }

    }
    else
    fprintf (stdout, "No hay sitio\n");
    }

    //////////////////*DICE SI HAY UN SITIO OCUPADO*///////////////

    void decirsitiovacio(const Tcamaras camaras,int*sitio)
    {
    int i;

    i=0;
    *sitio=-1;
    while((i<15) && (camaras[i].ocupado==1))
    {
    i=i+1;
    }
    if(i<15)
    *sitio=i;
    }

    /////////////////////////*BUSCAR IDENTIFICADOR*//////////////////////////

    void buscarid(Tcamaras camaras,Tidentificador id_comp,int *comp,int *pos)
    {
    int i;
    int encontrado;

    i=0;
    encontrado=-1;
    while (i<15 && encontrado!=0)
    {
    if (camaras[i].ocupado!=0)
    {
    encontrado=strcmp(camaras[i].maquinas.identificador,id_comp);
    }
    if (encontrado==0)
    {
    *pos=i;
    *comp=0;
    }
    i=i+1;
    }
    }

    ////////////////*LECTURA DATOS LABORALES*////////////////////

    void introducirdatoscam(Tmaquinas * maquinas)
    {
    leer_entero("Introduzca el id de la camara: ",maquinas->identificador);
    leer_cadena("Introduzca la zona que monitoriza: ",20,maquinas->zona);
    }

    //////////////////////*LEER UNA CADENA DE CARACTERES Y NUMEROS REALES Y ENTEROS*///////////////

    void leer_real ( const char mensaje[], double *resultado )
    {
    char aux[50]; /* almacén temporal para la línea tecleada */
    double valido; /* indica si el valor introducido es válido o no */

    fprintf ( stdout, "%s: ", mensaje );
    fflush ( stdin );
    fgets ( aux, 50, stdin );


    valido= sscanf( aux, "%lf", resultado)==1?1:0;

    while ( valido==0 )
    {
    fprintf ( stdout, "ERROR: %s no valido\n", mensaje );
    fprintf ( stdout, "%s: ", mensaje );
    fflush ( stdin );
    fgets ( aux, 50, stdin );

    valido= sscanf( aux, "%lf", resultado)==1?1:0;

    }
    }

    void leer_cadena ( const char mensaje[], const int tam, char resultado[] )
    {
    int valido; /* indica si el valor introducido es válido o no */
    char aux[tam+1]; /* almacén temporal para los datos tecleados */


    fprintf ( stdout, "%s: ", mensaje );
    fflush ( stdin );
    fgets ( aux, tam+1, stdin );
    valido = ( aux[strlen(aux)-1]== '\n');
    while ( !valido )
    {

    fprintf ( stdout, "ERROR: %s no valido\n", mensaje );
    fprintf ( stdout, "%s: ", mensaje );
    fflush ( stdin );
    fgets ( aux, tam+1, stdin );
    valido = ( aux[strlen(aux)-1]== '\n' );
    }
    aux[strlen(aux)-1]= '\0';
    strcpy ( resultado, aux );
    }

    void leer_entero ( const char mensaje[], int *dato )
    {
    char tmp[20]; /* recoge los datos escritos por el usuario */
    char *fin; /* apunta al último carácter procesado */

    do
    { do
    { fprintf ( stdout, "%s: ", mensaje );
    fgets ( tmp, 20, stdin );
    } while ( ( tmp[strlen(tmp)-1]!='\n' || tmp[0]=='\n' ) && !fflush(stdin) && fprintf ( stdout, "Dato no válido\n" ) );
    *dato = strtol ( tmp, &fin, 10 );
    } while ( ( *fin != '\n' || *dato == LONG_MIN || *dato == LONG_MAX ) && !fflush(stdin) && fprintf ( stdout, "Dato no válido\n" ) );
    }
    Última edición por webclon2000; 23-02-2010 a las 19:36
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    El primer error es por que
    Código:
    typedef int Tidentificador[];
    debería ser
    Código:
    typedef int *Tidentificador;
    En el segundo error, usas strcmp para comparar un arreglo de enteros.
    Para que funcione abría que hacerle un casteo, cambiando
    Código:
    encontrado=strcmp(camaras[i].maquinas.identificador,id_comp);
    por
    Código:
    encontrado=strcmp((char*)(camaras[i].maquinas.identificador),(char*)id_comp);
    Además fijate que para poder hacer este uso de strcmp() tenés que asegurarte que el arreglo termina con 0.
    Si bien no lo leí al código, mas que para hacerlo compilar, el programa no funciona. Deberías revisarlo, si no entendés algo avisas y listo.


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  3. #3  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Antes de irme a dormir le di una miradita al código, y veo que me equivoqué en la primer corrección.
    Deberías poner
    Código:
    typedef int Tidentificador[];
    pero poniendo alguna constante entre los corchetes.
    Yo había pensado que mas adelante en el código usabas asignamiento dinámico y por eso deje solo el puntero.

    De esta forma el programa no me da el segmentation fault de antes, y con razón jeje


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  4. #4  
    Iniciado
    Fecha de ingreso
    Feb 2010
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    muxisimas gracias,ahora compila bien lo que le pasa es q ahora se queda pillado al iniciarlo,ahora me pondre a investigar que le pasa,pero gracias de todas formas
    Citar  
     

Temas similares

  1. Respuestas: 1
    Último mensaje: 23-11-2012, 09:09
  2. Estructura EXE
    Por biyonder en el foro GENERAL
    Respuestas: 1
    Último mensaje: 28-09-2009, 03:28
  3. Estructura pila
    Por valeronfor en el foro WINDOWS
    Respuestas: 0
    Último mensaje: 16-11-2006, 04:24
  4. Funciones y estructura de un spider
    Por thebosz en el foro GENERAL
    Respuestas: 10
    Último mensaje: 03-10-2004, 19:43
  5. Estructura de puntero por parametro...
    Por Dwarft en el foro GENERAL
    Respuestas: 9
    Último mensaje: 16-07-2004, 18:49

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •