buenas otra vez jaja tengo un problema con programa

Iniciado por eduardo17445, 4 Abril 2014, 06:48 AM

0 Miembros y 1 Visitante están viendo este tema.

eduardo17445

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

eferion

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.

eduardo17445


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;
               }

nolasco281

#3
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 (cpp) [Seleccionar]
private:
char nom[15];
float sueldo;


2. con respecto a lo que preguntas

Código (cpp) [Seleccionar]
cout<<"nombre----";
cin.getline (nom,15);


debe de ir un

Código (cpp) [Seleccionar]
cin.ignore();

quedandote asi.


Código (cpp) [Seleccionar]
cout<<"nombre----";
cin.getline (nom,15);
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

Lo que se puede imaginar... se puede programar.

eduardo17445

#4
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






eferion

Si estás usando C++... por qué no usas la clase string?

Código (cpp) [Seleccionar]

class empleado
{
  string nombre;

  void ingresar_datos()
  {
    cout<<"nombre----";
    cin >> nombre;
    cout<<endl;
  }
};


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??

nolasco281

#6
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.
Lo que se puede imaginar... se puede programar.

eduardo17445

#7
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

eferion

Cita de: 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.

Código (cpp) [Seleccionar]

string nombre;
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 ;)

Cita de: eduardo17445 en  4 Abril 2014, 09:05 AM
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.

Cita de: eduardo17445 en  4 Abril 2014, 09:21 AM
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*.

eduardo17445

no entiendo algo dices cambiar char por string