Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Consola no ejecuta el programa

Estas en el tema de Consola no ejecuta el programa en el foro de C/C++ en Foros del Web. Hola soy nuevo en esto de programar, no encuentro el erroren este codigo cuando lo ejecuto solamente me pide el primer dato y luego de ...
  #1 (permalink)  
Antiguo 31/07/2015, 20:50
 
Fecha de Ingreso: julio-2015
Mensajes: 3
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta Consola no ejecuta el programa

Hola soy nuevo en esto de programar, no encuentro el erroren este codigo cuando lo ejecuto solamente me pide el primer dato y luego de eso solo muestra los siguientes "cout" sin dejarme ingresar los demás datos y termina pidiendo que ingrese una tecla para terminar. Ya me ha pasado con otros intentos, utilizo Visual Studio y Dev c++ y en ambos es lo mismo. Este es el código:

/*En este ejercicio e calculara el salario de un trabajador teniendo en cuenta los descuentos correspondientes
al salario de este si obtuvo algún préstamo por parte de la empresa.
Hay dos secciones en la empresa y consecuentemente dos salarios: el primero es el cargo Administrativo el cual
devenga $ 56000 y el otro cargo es el operativo con un valor por el dia trabajado de $ 48000*/

#include "iostream"

using namespace std;

int main()
{
char puesto, administrativo=0;
int deuda, dias,sueldo;

cout << "Ingrese puesto del empleado: ";
cin >> puesto;

cout << "Ingrese el numero de dias que trabajo: ";
cin >> dias;

if (puesto == administrativo) {

cout << "Ingrese el monto total de deuda con la empresa, si tiene";
cin >> deuda;

sueldo = (56000 * dias) - deuda;

cout << "El total a pagar es: ";

}

else

cout << "Ingrese el monto total de deuda con la empresa, si tiene";
cin >> deuda;

sueldo = (48000 * dias) - deuda;

cout << "El total a pagar es: ";

return 0;
}

Gracias
  #2 (permalink)  
Antiguo 01/08/2015, 07:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Consola no ejecuta el programa

Hola, te comento varias cosas, empezando por las más generales.

-Debes decorar el código para que sea más legible para los que leemos en el foro. Además de ser una norma, un texto poco legible hará que mucha gente no se pare a ver tu problema, por lo que reduces las posibilidades de encontrar una respuesta. Para hacerlo tienes un desplegable sobre la esquina superior derecha de esta caja de texto, donde pone Highlight. Allí eliges C++

-Luego te comento algún error de tu programa....no has encerrado entre llaves el bloque else, por lo que no te va a funcionar bien.

-Sobre este mismo bloque, te aconsejo que todo lo que sea repetido lo saques de la secuencia if/else. Es menos propenso a errores, no duplicas nada y es más lógico.
Así que en este bloque:
Código C++:
Ver original
  1. if (puesto == administrativo)
  2. {
  3. cout << "Ingrese el monto total de deuda con la empresa, si tiene";
  4. cin >> deuda;
  5. sueldo = (56000 * dias) - deuda;
  6. cout << "El total a pagar es: ";
  7. }

y este otro (cuando lo encierres entre llaves):
Código C++:
Ver original
  1. else
  2. cout << "Ingrese el monto total de deuda con la empresa, si tiene";
  3. cin >> deuda;
  4. sueldo = (48000 * dias) - deuda;
  5. cout << "El total a pagar es: ";

Lo relevante es si multiplico por 56000 o por 48000. El resto de sentencias no forma parte de esa decisión.

Así que es mejor esto:
Código C++:
Ver original
  1. cout << "Ingrese el monto total de deuda con la empresa, si tiene";
  2. cin >> deuda;
  3. if (puesto == administrativo) {
  4.     sueldo = (56000 * dias) - deuda;
  5. }
  6. else
  7. {
  8.     sueldo = (48000 * dias) - deuda;
  9. }
  10. cout << "El total a pagar es: ";

Por cierto que desués de sacar por consola la cadena "El total a pagar" has de sacar la variable sueldo, para que se lea correctamente.


- Y por fin, la duda que no te deja seguir.....has definido puesto y administrativo como char, y has igualado administrativo a 0.
Eso quiere decir que has asignado a administrativo el caracter nulo (mira una tabla ascii), por lo que tenga el valor que tenga la variable puesto no será nula, ya que lee una entrada del teclado.

Puedes hacer dos cosas, convertir esas variables a int, y asumir que el valor numérico 0 corresponde a "administrativo", o darle un valor de char a "administrativo", de forma que lo puedes igualar a 'a', ó 'A', o incluso '0'. Fíjate en las comillas simples para definir un caracter char.

¡Saludos y espero que te sirva de ayuda!
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 01/08/2015, 18:04
 
Fecha de Ingreso: julio-2015
Mensajes: 3
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta Respuesta: Consola no ejecuta el programa

Hola

Primero gracias por los consejos y segundo en lo referente a las variable "puesto" y "administrativo" tengo la duda de si esta bien nombrarlas como char o deberían ser "strings" ya que son solo palabras o deberían ser algún otro tipo de dato. Ademas inicialize la variable "administrativo" porque al compilar me mostraba un error diciendo: se utilizo la variable local "administrativo" sin inicializar.

Igual trate de hacer los cambios que recomendaste pero fue igual. Leyendo un poco mas al parecer podría tratarse del buffer el cual no se a limpiado correctamente, aun así intente con varios metodos como poner fflush(stdin); o cin.ignore() pero nada, también los consejos de esta pagina https://support.microsoft.com/es-es/kb/94227 y nada. Pero ninguno de estos métodos me ha servido.

Agradezco cualquier otro consejo.

Código C++:
Ver original
  1. #include "stdafx.h"
  2. #include "iostream"
  3.  
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int puesto;
  10.     int deuda, dias, sueldo;
  11.     char administrativo='a';
  12.    
  13.     cout << "Ingrese puesto del empleado: ";
  14.     cin >> puesto;
  15.    
  16.     cout << "Ingrese el numero de dias que trabajo: " << flush;
  17.     cin >> dias;
  18.     cout << "Ingrese el monto total de deuda con la empresa, si tiene" << flush;
  19.     cin >> deuda;
  20.     if (puesto == administrativo) {
  21.  
  22.         sueldo = (56000 * dias) - deuda;
  23.  
  24.     }
  25.  
  26.     else {
  27.  
  28.         sueldo = (48000 * dias) - deuda;
  29.     }
  30.     cout << "El total a pagar es: " << flush;
  31.     cin >> sueldo;
  32.  
  33.     system("pause");
  34.     return 0;
  35. }
  #4 (permalink)  
Antiguo 02/08/2015, 01:55
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Consola no ejecuta el programa

Hola:

El problema es que has definido la variable puesto como int y seguramente le estés dando un valor por teclado diferente de un número, para compararla con administrativo.
Define puesto como char

Y si, la verdad es que es buena práctica inicializar las variables a algún valor. Incluso cuando van a ser calculadas más adelante es recomendable darles un valor inicial.

Y al final mira que vuelves a pedir sueldo, cuando ese valor ya viene calculado de antes.

Debería ser:

Código C++:
Ver original
  1. cout << "El total a pagar es: " << sueldo<<endl;

Sobre lo de definir las variables como char[] es factible, pero recuerda que entonces no puedes comparar una cadena con otra mediante el operador "==", sino que has de usar la función strcmp que compara una cadena de chars con otra.
O que uses la clase string, en cuyo caso sí existe ese operador para comparar dos strings.
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 03/08/2015, 19:30
 
Fecha de Ingreso: julio-2015
Mensajes: 3
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Consola no ejecuta el programa

Me fue mejor utilizando string de esta forma:

Código C++:
Ver original
  1. string puesto;
  2.  
  3. cout << "Ingrese puesto: ";
  4. cin>>puesto;
  5.  
  6. if(puesto=="administrativo"){
  7.  
  8. }

Porque estuve viendo la función strcmp pero no la entendí muy bien

Etiquetas: char, consola, ejecuta, int, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:15.