Ansi C: Lvalue required



  • Pues eso, estoy intentando hacer una practica para septiembre y no consigo apañar este error.

    Os explico a groso modo:

    Se trata de gestionar un acuario mediante un array de registros, o sea un tipo struct nombre_del_array.

    Debo dar de alta, baja y modificar los datos, depurando entradas y esas cosas.

    Pues llego a un momento en que acepto una cadena de caracteres char nombre[30], lo acepto mediante scanf, y luego una vez comprobado que ese nombre es el que quiero lo tengo que asignar al objeto struct que me he declarado previamente.

    Hay es donde esta el problema, lo haga como lo haga siempre me pone Lvalue required.

    El objeto es algo parecido a esto:

    struct pez
    {
    char nomcom[30];
    char pais[25];
    .
    .
    .
    int clave;
    };

    y luego tengo una funcion y dentro es cuando hago lo de la asignacion:

    void modifica (struct pez *acu)
    {
    char nombre[30];
    char pais[25];
    .
    .
    int clave;

    /AHORA EMPIEZA HA HACER COSAS LA FUNCION
    .
    . es cuando pregunto y guardo los valores temporales
    .
    .
    .
    Y LLEGO AL MOMENTO DE ASIGNAR LOS VALORES/

    acu_.nomcom=nombre; //acu es el nombre de mi array
    acu_.pais=pais; //es en estas lineas donde me da el error Lvalue required.

    }

    El caso es que ese error solo me lo da con las variables de cadena de caracteres, con las de tipo entero y tipo caracter no me da problemas.

    Espero haberme explicado con claridad y gracias de antemano por la ayuda.

    P.D. Alguien tiene un manual en castellano del dev c++?__



  • y esta bien definido el array acu?.Si quieres pasame el programa y le echo un vistazo haber si veo algo.Mi email es emiliocarlos@mixmail.com



  • No sé si… ¿Q tal usar strcpy(cadena_virgen, cadena_temporal) ? Esta función incluída en <string.h> copia el contenido de la cadena de la derecha en la de la izq (y te pone el \0 ) Yo lo hago así y me funciona.<br /><br />Salu2 y suerte!<br /><br />Ejemplo:<br /><br />for(i=0; i<X; i++)<br />{<br /><br />strcpy(acu<em>.nomcom, temporal.nomcom);<br />strcpy(acu<em>.pais, temporal.pais):<br /><br />.<br />.<br />.<br />etc…<br />}</em></em>



  • Lo que indica el error es que a la funcion le falta un valor por la izquierda.

    ¿En que linea te da el error?.


  • Veteranos HL

    Ese error lo da muchas veces porque, oh se te ha olvidado abrir o cerrar paréntesis, o has olvidado una coma entre los paréntesis.
    Por ejemplo, en el caso del strcpy: strcpy (cadena_origen cadena_destino);
    En vez de strcpy (cadena_origen, cadena_destino);

    Lo más seguro es que hayas hecho algo así mal, pero puede estar en cualquier parte.



  • Gracias a todos por las respuestas.

    Una cosa, no puedo usar funciones especificas de cadenas, me las tendria que crear yo.

    Alguna sugerencia?

    Voy a colgar el programa por si lo quereis echar un vistazo, total se puede difundir por la red sin ningun compromiso, que los de la SGAE afortunadamente aun no se han metido en esto.
    attachment_p_170875_0_acuario2.zip



  • Lo que hace la función strcpy() es recibir dos cadenas y mediante un bucle ir copiando los elementos de la de la derecha en la izq.

    Yo haría esto:

    void strcpy_casera(char copia[], char original[])
    {

    int i=0;

    while(original_!='\0')
    {

    copia_=original_;
    i++;

    }

    copia_='\0';

    }

    Salu2

    PD: Se supone que la cadena copia es al menos igual de grande que original.

    PD2: Cuanto tenga más ánimo le echo un vistazo más a fondo a tu programa (he tenido que hacer algunos ajustes para compilarlo proque mi compilador es una basura :( pero al ejecutarlo termina de repente… )____



  • Bueno, quiero pedir disculpas a la gente que me ha ayudado en esto por marcharme durante un tiempo sin decir adios.

    Lo siento es que se me fue la pelota.

    Por cierto ya casi casi que tengo la practica por los co***nes, al final puedo usar el strcpy y me han hecho la vida mas facil.

    Gracias a todos por vuetra ayuda.


Accede para responder
 

Has perdido la conexión. Reconectando a Hardlimit.