Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: eduardo17445 en 4 Abril 2014, 06:48 am



Título: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 06:48 am
ingreso los primeros y me los acepta pero cuando voy a ingresar el siguiente empleado por que es una clase empleado me brinca el nombre para el sueldo que podria ser eso


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 08:16 am
La verdad es que en tu código se aprecia una fuga de memoria, además ese puntero que tienes dentro de la tercera función no está incializado...

No, ya en serio, no somos adivinos, o pones código o nadie te va a contestar.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 08:22 am

este es el codigo
#include<iostream>
#include<math.h>
using namespace std;
class empleado
{
      char nom[15];
      float sueldo;
      public:
             void ingresar_datos();
             void imprimir();
             void mostrar_impuesto_a_pagar();
             };
             void empleado::ingresar_datos()
             {
                 
                 cout<<"nombre----";
                 cin.getline (nom,15);
                 cout<<endl;
                 cout<<"sueldo ---   ";
                 cin>>sueldo;
                 cout<<endl;
                 }
                 void empleado::imprimir()
                 {
                     
                     cout<<"nombre-------  "<<nom<<endl;
                     cout<<endl;
                     cout<<"sueldo-------- "<<(sueldo)<<endl;
                     cout<<endl;
                     }
                 void empleado::mostrar_impuesto_a_pagar()   
                 {
                     int iva=0;
                   int totalemple;
                   int sueldo ;
                     cout<<"impuesto__pagar------"<<iva<<endl;
                     cout<<endl;
                   
                      if(sueldo<=300)
                     if(totalemple==1)
                   iva=totalemple/sueldo;
                   
                     
                 }
                                 
           int main()
           {
               empleado b;
               b.ingresar_datos();
               b.imprimir();
               b.mostrar_impuesto_a_pagar();
               system("pause");
               return 0;
               }


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: nolasco281 en 4 Abril 2014, 08:33 am
Hola primero que nada.

a primera vista puedo ver que solo declaraste las funciones como public y no las variables no las declarastes como private

Código
  1. private:
  2. char nom[15];
  3. float sueldo;

2. con respecto a lo que preguntas

Código
  1. cout<<"nombre----";
  2. cin.getline (nom,15);

debe de ir un

Código
  1. cin.ignore();

quedandote asi.


Código
  1. cout<<"nombre----";
  2. cin.getline (nom,15);
  3. cin.ignore();

creo que esa es la razon de por que te salta y no te pide el nombre de regreso espero averte ayudado saludos.


PD: si quieres saber para que sirve el cin.ignore();
http://foro.elhacker.net/programacion_cc/funcion_cinignore-t290246.0.html (http://foro.elhacker.net/programacion_cc/funcion_cinignore-t290246.0.html)



Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 08:47 am
ahora es con el sueldo ago lo mismo o ahi es distinto


EI: juntando mensajes.


ya si avia que hacer lo mismo pero ahora m muestra uno solo a q c debera
 

 
 
 


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 08:56 am
Si estás usando C++... por qué no usas la clase string?

Código
  1. class empleado
  2. {
  3.  string nombre;
  4.  
  5.  void ingresar_datos()
  6.  {
  7.    cout<<"nombre----";
  8.    cin >> nombre;
  9.    cout<<endl;
  10.  }
  11. };

PD.: Creo que es la segunda vez que te lo digo: Usa las etiquetas GeSHi para el código. Ya llevas 199 mensajes en el foro... va siendo hora de adaptarse un poco a las normas, no crees??


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: nolasco281 en 4 Abril 2014, 09:01 am
eferion depende con una string no puedes poner un nombre completo como (Haker Perez).
si no me equivoco no?

Me corrigo tienes razon tambien puede usar una string.  gg lapsus.

eduardo no es nesesario poner cin.ignore(); por todos lados, solo ponlo despues de que el siquente dato que se ingresara sea una cadena de caracteres.

esta es la salida que me da a mi.
(http://4.bp.blogspot.com/-nbuPIxi9FU4/Uz5X0vlcaTI/AAAAAAAAAm0/a05xRAkunq4/s1600/Untitled.png)


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 09:05 am
no m piden nadamas nombre no ponerlo completo pero me dices string como dato



EI: juntando mensajes.




yo lo puse despues del nombre y despues del sueldo q m asia lo mismo que con el nombre


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 09:34 am
eferion depende con una string no puedes poner un nombre completo como (Haker Perez).
si no me equivoco no?

Me corrigo tienes razon tambien puede usar una string.  gg lapsus.

Código
  1. string nombre;
  2. cin >> nombre;

Así tal cual te va a almacenar el nombre todo lo que introduzcas hasta el salto de línea... aunque con tu respuesta me da que ya lo has visto ;)

no m piden nadamas nombre no ponerlo completo pero me dices string como dato

Que solo te pidan una cosa no implica que tengas que limitar el código a únicamente ese caso... en no pocas ocasiones es más fácil hacer código para casos generales que para casos concretos.

yo lo puse despues del nombre y despues del sueldo q m asia lo mismo que con el nombre

En vez de escribir dos mensajes seguidos es mejor que modifiques el primer mensaje, te evitarás problemas con los moderadores y además tu mensaje se leerá mejor ( no se pondrán en dos páginas diferentes por ejemplo ).

char* y string son, digamos, equivalentes. Sirven para lo mismo. Lo que sucede es que char*, por ser herencia de C, es mucho más sensible a errores y está mucho más limitado, mientras que string tiene un diseño mucho más potente que, además, está libre de errores, sin lagunas de memoria, sin buffer overflow...

Además, la STL de C++ ofrece muchas más prestaciones para string que para char*.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 09:36 am
no entiendo algo dices cambiar char por string


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 09:41 am
Lo he puesto en otro mensaje un poco más arriba:

Código
  1. class empleado
  2. {
  3.  string nombre;
  4.  
  5.  void ingresar_datos()
  6.  {
  7.    cout<<"nombre----";
  8.    cin >> nombre;
  9.    cout<<endl;
  10.  }
  11. };

Si no es a esto a lo que te refieres, no entendí tu pregunta.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: nolasco281 en 4 Abril 2014, 09:52 am
Modificando el codigo para leer todo un nombre.

Código
  1.    class empleado
  2.    {
  3.     string nombre;
  4.  
  5.     void ingresar_datos()
  6.     {
  7.       cout<<"nombre----";
  8.       getline (cin, nombre);
  9.       cin.ignore();
  10.       cout<<endl;
  11.     }
  12.    };

Saludos.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 10:02 am
no me corre pero esa condicion funciona con dv cpp tambien


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: nolasco281 en 4 Abril 2014, 10:09 am
Amigo has caso a los consejos que se te dicen esto no es un chat es un foro.

No crees un comentario nuevos solo modificalo. saludos. : )


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 10:12 am
pero sigue mostrando el 2do nada mas


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 10:17 am
Repito lo dicho. No somos adivinos y tu no eres un crío.

Esto implica al menos lo siguiente:

* Lee las normas y respétalas.

* Si no pones el código después de modificarlo no podemos ayudarte.

* Deberías aprender a pensar por tu cuenta y a buscar soluciones ( cuando entres en una empresa más te vale no depender tanto de este foro ).

* Escribe con más tranquilidad para que te endendamos ( esto no es una charla con tus amigos en un bar, por respeto a los que te intentamos ayudar habla con un formato un poco más formal y serio ). Moléstate en describir correctamente el problema y en aportar el código que de idea del error ( es tarea tuya hacer una depuración mínima para ver los problemas ).



Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eduardo17445 en 4 Abril 2014, 10:24 am

este este es el  coodigo modificado
#include<math.h>
#include<string>
using namespace std;
class empleado
{
        string nom;
      float sueldo;
      public:
             void ingresar_datos();
             void imprimir();
             void mostrar_impuesto_a_pagar();
             };
             void empleado::ingresar_datos()
             {
                  for(int i=0;i<=1;i++)
                  {
                 
                 cout<<"nombre----";
                 getline (cin,nom);
                 cin.ignore();
                 cout<<endl;
                 cout<<"sueldo ---   ";
                 cin>>sueldo;
                 cin.ignore();
                 cout<<endl;
                 }
                 }
                 void empleado::imprimir()
                 {
                     
                     cout<<"nombre-------  "<<nom<<endl;
                     cout<<endl;
                     cout<<"sueldo-------- "<<(sueldo)<<endl;
                     cout<<endl;
                     }
                 void empleado::mostrar_impuesto_a_pagar()   
                 {
                     int iva=0;
                   int totalemple;
                   int sueldo ;
                                   
                      if(sueldo<=300)
                     if(totalemple==2)
                   iva=totalemple/sueldo;
                   cout<<"impuesto__pagar------"<<iva<<endl;
                    cout<<endl;
                   
                     
                 }
                                 
           int main()
           {
               empleado b;
               b.ingresar_datos();
               b.imprimir();
               b.mostrar_impuesto_a_pagar();
               system("pause");
               return 0;
               }


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 10:26 am
me niego a mirar más código tuyo mientras no lo etiquetes con la etiqueta "code" correspondiente.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: nolasco281 en 4 Abril 2014, 10:28 am
xD eferion tranquilo

Hola.

falta que incluyas la libreria.

Código
  1. #include<iostream>

saludos.

|
|->Tienes razon.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: eferion en 4 Abril 2014, 10:35 am
xD eferion tranquilo

Hola.

falta que incluyas la libreria.

Código
  1. #include<iostream>

saludos.

Si estoy tranquilo... pero son ya 126 mensajes... puedo tener manga ancha con alguien que es nuevo... pero es una putada entrar al foro con el movil y darte de bruces con un código puesto a pelo en el hilo.

Si alguien no se digna a facilitar la vida a quien intenta ayudarle lo mismo es porque prefiere no ser ayudado.


Título: Re: buenas otra vez jaja tengo un problema con programa
Publicado por: rir3760 en 4 Abril 2014, 15:45 pm
pero sigue mostrando el 2do nada mas
Muestra solo el segundo nombre porque tienes una clase empleado donde solo se puede almacena la información de ... un empleado pero por alguna extraña razon tu intentas almacenar dos:
Código
  1. for (int i = 0; i <= 1; i++) {
  2.   cout << "nombre----";
  3.   getline (cin, nom);
  4.   cout << endl;
  5.  
  6.   cout << "sueldo ---   ";
  7.   cin >> sueldo;
  8.   cin.ignore();
  9.   cout << endl;
  10. }
Por supuesto los campos nom y sueldo almacenan la ultima información almacenada en ellos (los datos del ultimo empleado). Debes modificar el programa para que este cree dos instancias de la clase, cada una lee sus datos, nada mas.

Por ultimo y por favor lee las Reglas del subforo (http://foro.elhacker.net/programacion_cc/reglas_del_subforo-t251603.0.html).

Un saludo