SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: maximo10 en Miércoles 13 de Diciembre de 2006, 02:48

Título: Ayudenme Porfaaaaaaaa
Publicado por: maximo10 en Miércoles 13 de Diciembre de 2006, 02:48
HOLA AMIGOS NECESITO AYUDA CON ESTE PROGRAMA SALE EL ERROR:

LVALUE REQUIRED Y NO SE PORQUE O COMO PONERLE VALOR CERO O NULO A NOMBRE ESPERO ME AYUDEN.

#include<stdio.h>
#include<conio.h>


struct REGEMPL
{
   int NUMERO;
   char NOMBRE[30];
   int DEPTO;
   int PUESTO;
   float SUELDO;
}  REGEMPL;

   FILE *EMPLEADOS;
   int I,NUM,NUMREGISTROS,OPCION;
   char DESEA[1],SEGURO[1];
   void CREAR();
   void ALTAS();
   void BAJAS();
   void CAMBIOS();
   void CONSULTAS();
   void CATALOGO();
   void NOMINA();

void main()
{
   clrscr();
   printf("        SISTEMA DE NOMINA\n\n\n");
   printf("1.CREAR ARCHIVO\n");
   printf("2.ALTAS\n");
   printf("3.BAJAS\n");
   printf("4.CAMBIOS\n");
   printf("5.CONSULTAS\n");
   printf("6.CATALOGO DE EMPLEADOS\n");
   printf("7.NOMINA QUINCENAL\n");
   printf("8.SALIR\n\n\n");
   printf("OPCION:  ");
   scanf("%s",&OPCION);
  switch (OPCION)
     {
     case '1': CREAR(); break;
     case '2': ALTAS(); break;
     case '3': BAJAS(); break;
     case '4': CAMBIOS(); break;
     case '5': CONSULTAS(); break;
     case '6': CATALOGO(); break;
     case '7': NOMINA(); break;
     case '8': break;
     default: OPCION=8;
     }
}

   //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*--*-*-*-*-*-*-*
   //      FUNCIONES                                     //
   //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*--*-*-*-*--*-*-*-*-*-*-*

void CREAR()
  {
  clrscr();
  printf("CREAR ARCHIVO\n\n");
  EMPLEADOS = fopen("c://EMPLEADOS.DAT","wr");
  printf("¨Cuantos registros deseas realizar ?:  ");
  scanf("%d",&NUMREGISTROS);

  REGEMPL.NUMERO=0;
  REGEMPL.NOMBRE='NA';
  REGEMPL.DEPTO=0;
  REGEMPL.PUESTO=0;
  REGEMPL.SUELDO=0;


  getche();
  }

void ALTAS()
{
clrscr();
printf("ALTAS");
getche();
}

void BAJAS()
{
clrscr();
printf("BAJAS");
getche();
}

void CAMBIOS()
{
clrscr();
printf("CAMBIOS");
getche();
}

void CONSULTAS()
{
clrscr();
printf("CONSULTAS");
getche();
}

void CATALOGO()
{
clrscr();
printf("CATALOGO");
getche();
}

void NOMINA()
{
clrscr();
printf("NOMINA");
getche();
}
Título: Re: Ayudenme Porfaaaaaaaa
Publicado por: robertogt en Miércoles 13 de Diciembre de 2006, 03:23
Lo que pasa es que a una variable tipo char, y que la estas manejando como cadena no le podes asignar un valor asi como lo estas haciendo.

Si querés inicializar una cadena lo tenés que hacer con el caracter '\0' si no estoy mal

escribir
Código: Text
  1.  
  2. REGEMPL.NOMBRE='NA';
  3.  
  4.  
Es incorrecto ya que la variable NOMBRE es un vector de caracteres, y en ese momento no le estás asignando el valor 'NA' a alguna posicion del vector.

con que le cambies esto si va a correr, por ejemplo con
Código: Text
  1.  
  2. REGEMPL.NOMBRE[0]='NA';
  3.  
  4.  
Título: Re: Ayudenme Porfaaaaaaaa
Publicado por: maximo10 en Miércoles 13 de Diciembre de 2006, 03:38
OK GRACIAS SI FUNCIONO COMO LOS QUIERO
Título: Re: Ayudenme Porfaaaaaaaa
Publicado por: Mollense en Miércoles 13 de Diciembre de 2006, 03:40
Cita de: "robertogt"
Es incorrecto ya que la variable NOMBRE es un vector de caracteres, y en ese momento no le estás asignando el valor 'NA' a alguna posicion del vector.

con que le cambies esto si va a correr, por ejemplo con
Código: Text
  1.  
  2. REGEMPL.NOMBRE[0]='NA';
  3.  
  4.  
Y en este caso le estas asignando 2 caracteres a una sola posición, No se como se comporte el programa supongo que asignará el valor "N" a la posición 0 del vector REGEMPL.NOMBRE.

Utiliza el valor "NULL".

Código: Text
  1. REGEMPL.NOMBRE[0]=NULL;
  2.  

Saludos
Título: Re: Ayudenme Porfaaaaaaaa
Publicado por: robertogt en Miércoles 13 de Diciembre de 2006, 04:44
Corri el programa con esa instruccion y no dio ningun error, pero lo más seguro es que tambien eso sea incorrecto, y solo lo puse así para que se diera cuenta que el error era al no poner el subindice de la cadena, por eso tambien le puse la nota que usara '\0' si queria ponerle un valor null a esa posicion del vector.

y al igual que vos Angel_K_ido, tampoco estoy seguro que haría esa

Código: Text
  1. REGEMPL.NOMBRE[0]='NA';
  2.  
instruccion, porque por otra parte ahi no estoy asignando una cadena a esa posicion del vector o si?? :huh: ,  en realidad ni se para que era que maximo10 utilizaba ese valor de NA, pero lo bueno es que ya lo arreglo  :lol:

Saludos