• Sábado 14 de Diciembre de 2024, 22:43

Autor Tema:  Problema con este codigo [Solucionado]  (Leído 1020 veces)

hellgeminis

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Problema con este codigo [Solucionado]
« en: Sábado 21 de Agosto de 2010, 00:24 »
0
Hola tengo problema con este código, el no me da ningún error al compilarlo pero cuando imprime salen pegados unos datos y no se porque, supongo que es algo pequeño pero llevo rato querer solucionarlo y no lo encuentro les agradecería que me ayudaran.

Cuando ingreso los datos todo bien a la hora de imprimir me aparece el código de empleado pegado con el turno.

#include <iostream.h>
#include<string.h>
#include<conio.h>

class cliente{
      char nombre[20];
      char empresa[20];
      char direccion[20];
      char telefono[20];
   public:
      cliente(char[], char[], char[], char[]);
      void datosCliente();
      void verCliente();
};

cliente::cliente(char nomb[]="", char emp[]="", char dir[]="", char telf[]=""){
   strcpy(nombre, nomb);
   strcpy(empresa, emp);
   strcpy(direccion, dir);
   strcpy(telefono, telf);
}

void cliente::datosCliente(void){
   cout<<"nNombre del Cliente: ";
   cin>>nombre;
   cout<<"Empresa: ";
   cin>>empresa;
   cout<<"Direccion: ";
   cin>>direccion;
   cout<<"Telefono: ";
   cin>>telefono;
}

void cliente::verCliente(void){
   cout<<"nCliente: "<<nombre;
   cout<<"nEmpresa: "<<empresa;
   cout<<"nDireccion: "<<direccion;
   cout<<"nTelefono: "<<telefono;
}

class empleado{
      char codigo[4];
      char turno[20];
      cliente dCliente;
   public:
      //cliente(char[], char[], char[], char[], producto);
      empleado(char[], char[], cliente);
      void datosEmpleado(void);
      void verEmpleado(void);
};

empleado::empleado(char cod[]="", char turn[]="", cliente dCliente1=("Jose", "M&R", "Altamira", "22541896")):dCliente(dCliente1){
    strcpy(codigo, cod);
    strcpy(turno, turn);
}

void empleado::datosEmpleado(void){
   cout<<"nCodigo: ";
   cin>>codigo;
   cout<<"Turno: ";
   cin>>turno;
   dCliente.datosCliente();
}


void empleado::verEmpleado(void){
   cout<<"nCodigo: "<<codigo;
   cout<<"nTurno: "<<turno;
   dCliente.verCliente();
}

int menu(void);

main(){
   empleado empleado1("A100", "Diurno", cliente("Jose", "M&R", "Altamira", "22541864"));
   int continuar=1;
   while(continuar==1){
      clrscr();
      switch(menu()){
         case 1:
            cout<<"nDatos del Empleado";
            empleado1.datosEmpleado();
            getch();
            break;
         case 2:
            cout<<"nActualizar";
            getch();
            break;
         case 3:
               cout<<"nOrdenar";
               getch();
            break;
         case 4:
               cout<<"nDatos del Empleado";
               empleado1.verEmpleado();
               getch();
               break;
         case 5:
            cout<<"nBuscar";
            getch();
            break;
         case 6:
            cout<<"nEliminar";
            getch();
            break;
         case 7:
            cout<<"nVender";
            getch();
            break;
         case 8:
            continuar=0;
            getch();
            break;
         default:
         {
            cout<<"nOpcion Invalida";
            getch();
         }
      }
   }

   return 0;
}

int menu(void){
   int opcion;
   cout<<"n Menu Principal ";
   cout<<"n 1. Ingresar Datos";
   cout<<"n 2. Actualizar Datos";
   cout<<"n 3. Ordenar Datos";
   cout<<"n 4. Imprimir Datos";
   cout<<"n 5. Buscar Datos";
   cout<<"n 6. Eliminar Datos";
   cout<<"n 7. Vender Producto";
   cout<<"n 8. Salir";
   cout<<"nn Introduzca su opción: ";
   cin>>opcion;
   return(opcion);
}
« última modificación: Sábado 21 de Agosto de 2010, 02:33 por hellgeminis »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema con este codigo
« Respuesta #1 en: Sábado 21 de Agosto de 2010, 01:43 »
0
Antes que nada, un consejo, utiliza las etiquetas de [ code][ /code] (sin espacios en los corchetes) para encerrar tu codigo, ya que mejora la legibilidad del mismo.

Ahora, el error esta aca:

Código: C++
  1.  
  2. class empleado{
  3.     char codigo[4];
  4.     char turno[20];
  5.  
  6.  

ya que codigo tiene espacio para 4 caracteres, y necesitas espacio para 5 caracters ya que las cadenas en C/C++ utilizan un caracter adicional llamado nulo '' para representar el fin de la cadena. Entonces tu clave A100 en realidad son 4 caracteres mas el nulo, lo que equivale a 5. Cuando utilices variables para cadenas siempre reserva un espacio adiional para el nulo, o sea si vas a guardar 10, reserva 11, si vas a guardar 15, reserv 16 y asi sucesivamente.

O sea que lo unico que debes cambiar es:

Código: C++
  1.  
  2. class empleado{
  3.     char codigo[5];
  4.     char turno[20];
  5.  
  6.  

Y con eso ya debe funcionar correctamente.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

hellgeminis

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Problema con este codigo
« Respuesta #2 en: Sábado 21 de Agosto de 2010, 02:32 »
0
OK. ese era el problema.

Gracias por el dato de como poner el código.