Problemas con un programita

Iniciado por Meylar, 13 Junio 2011, 08:46 AM

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

Meylar

Hola, estoy comensando a programar en dev c++; asi que codifique un problema sencillo, pero cuando lo ejecuto me sale un mensaje que dice : "problema 20.exe dejo de funcionar", ya modifique la codificación varias veces y sigue el error,  nose que ocurre... :-(

Aqui el programa:

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

main()
{
      int pla_max, tip;
      char nom;
      float sal, comi, mon;
      float comi_to=0,mon_ma=0, mon_me=0;
      int n=1;
   
      while(n==1)
      {
                 puts("Digite el nombre del empleado");
                 scanf("%s",nom);
                 puts("El empleado es:\n1. Publico\n2. Privado");
                 scanf("%i",&tip);
                 while((tip!=1) || (tip!=2))
                 {
                              puts("Vuelva a ingrrsar el tipo de empleado. Tiene que ser:\n1. Publico\n2. Privado");
                              scanf("%i",&tip);
                  }
                 puts("Digite el salario del empleado:");
                 scanf("%f",&sal);
                 while (sal<=0)
                     {
                              puts("ERROR. El salario tiene que ser > 0. Vuelva a digitarlo:");
                              scanf("%f",&sal);
                       }
                 if(tip==1)
                 {
                     mon=sal*10;
                     comi=mon*0.05;
                     pla_max=7;
                     comi_to+=comi;
                  }
                 
                 else
                  {
                     mon=sal*7;
                     comi=mon*0.03;
                     pla_max=5;
                     comi_to+=comi;
                    }
                 if(mon_ma<mon)
                   {
                     mon_ma=mon;
                     }
                 else
                  {
                      if(mon_me<mon)
                          mon_me=mon;
                   }
                  printf("El empleado: %s tiene:", nom);
                  printf("El monto del prestamo es: $ %f", mon);
                  printf("Su comisión a pagar es: $ %f", comi);
                  printf("tiene un plazo maximo de: %f años", pla_max);
                  puts("¿Tiene otro empleado?");
                  scanf("%i", &n);
       }
       
       printf("La comisión total es: $ %f", comi_to);
       printf("El monto del prestamo mayor es: $ %f", mon_ma);
       printf("El monto del prestamo menor es: $ %f", mon_me);
       
       getch();
       return 0;
}

fantasma306

hola Meylar

bueno tu codigo tiene unas cuantas cosas mal o a lo mejor en dev c++ se programa diferente  :rolleyes:

te cuento:
(esto puede que se te haya escapado)
scanf("%s",nom);
scanf("%s", &nom);


tienes un error de logica
while((tip!=1) || (tip!=2))
while((tip!=1) &&  (tip!=2))

otra cosa, nom es un char por lo tanto tienes que poner %c en lugar de %s
printf("El empleado: %s tiene:", nom);
printf("El empleado: %c tiene:", nom);

PD: no se si te funcionan los scanf con %f para los float, a mi no me los cogia, y lo cambie por double, y el scanf en lugar de %f puse %lf.  ;)

suerte
Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

bettu

#2
puts("Digite el nombre del empleado");
scanf("%s",nom);


Se supone que si es el nombre del empleado, contendrá más de un caracter, por lo tanto en:

char nom;

deberías de declararlo como vector (cadena de caracteres). Una manera sencilla de hacerlo es con char nom[30]; (se declara un vector de 30 posiciones, si el nombre es más largo no cabrá). Yo recomiendo hacer el valor declarándolo con una etiqueta.

Una vez declarado el vector, esto...:
scanf("%s",nom);

lo tendrías que poner a:
scanf ("%[^\n]%*c", nom);

Lo demás, tal y como dice fantasma306.

Saludos!

Dark Invader

Cita de: bettu en 13 Junio 2011, 22:29 PM
puts("Digite el nombre del empleado");
scanf("%s",nom);


Se supone que si es el nombre del empleado, contendrá más de un caracter, por lo tanto en:

char nom;

deberías de declararlo como vector (cadena de caracteres). Una manera sencilla de hacerlo es con char nom[30]; (se declara un vector de 30 posiciones, si el nombre es más largo no cabrá). Yo recomiendo hacer el valor declarándolo con una etiqueta.

Una vez declarado el vector, esto...:
scanf("%s",nom);

lo tendrías que poner a:
scanf ("%[^\n]%*c", nom);

Lo demás, tal y como dice fantasma306.

Saludos!

Yo me acostumbraria a coger las palabras con "gets(palabra)"ya que scanf solo lee hasta los espacios,en este caso si el nombre es jose maria scanf solo leería jose pero con gets leería todo el nombre.

Salu2

bettu

Cita de: Dark Invader en 13 Junio 2011, 22:56 PM
Yo me acostumbraria a coger las palabras con "gets(palabra)"ya que scanf solo lee hasta los espacios,en este caso si el nombre es jose maria scanf solo leería jose pero con gets leería todo el nombre.

Salu2

Con el método que he puesto lee todo, pero cuando detecta el intro deja de leer. Lo que tú dices también es correcto  :)

Dark Invader

Cierto no me habia parado bien en tu codigo,solo lei scanf y ya pense en gets()  :xD

Salu2

Meylar

jeje gracias a todos... logre darle unos cuantas modificaciones a mi programita ;D; ademas fantasma306 tiene un poco de razón: esque en dev c++ se programa un poco  diferente  :rolleyes: