Dev - C++ - Consola no ejecuta el programa

 
Vista:
sin imagen de perfil

Consola no ejecuta el programa

Publicado por Alejandro Mejia (4 intervenciones) el 01/08/2015 04:55:25
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Consola no ejecuta el programa

Publicado por vangodp (287 intervenciones) el 01/08/2015 11:15:24
eso es por que al pulsar enter, la misma tecla enter es también considerada un carácter, entonces cuando pides un entero y luego después pulsas enter, eso todo va parar al buffer, luego se espera que vayan llegando variables de los tipos correctos para ir vaciando el buffer, o sea que si tienes un int y después un char seguido, el buffer va enviar el int al int y como enter es un char va saltar ese char dando múltiples errores en la lectura. Suele pasar cuando les strings, chars mezclados com otros tipos. Para solucionarlo, en C++, lo que puedes hacer es llamar a cin.sync(); después de cada cin>> que hagas.

cin>> loquesea;
cin.sync();

getline(....)
cin.sync();

Busca como limpiar el buffer en C++ en google y algo sale. Además aprenda como funciona el buffer de entrada que te va ser de mucha ayuda, y de paso el de salida también.
http://www.cplusplus.com/reference/istream/istream/sync/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consola no ejecuta el programa

Publicado por Alejandro Mejia (4 intervenciones) el 02/08/2015 01:46:15
Hola

Pues estuve averiguando y ya entiendo a que se refiere con el buffer, intente con tu metodo pero igual no me dejo, también intente con varios métodos que encontré en Internet como poner fflush(stdin); o cin.ignore() pero nada, también los consejos de esta pagina https://support.microsoft.com/es-es/kb/94227. He leído que el uso de cout y cin es precisamente para limpiar el buffer. Pero ninguno de estos métodos me ha servido.

Agradezco cualquier otro consejo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Consola no ejecuta el programa

Publicado por vangodp (287 intervenciones) el 02/08/2015 02:20:24
Danos más detalles de tu sistema operativo como win/liniux, 32/64 bits, IDE/Compilador/versión, todo lo que hallar conveniente.

vamos a hablar de errores y malas costumbres. XD Veo que haces un include de esta forma: #include"iostream" cuando deberías hacerlo #include<iostream>.

Otra cosa rara que veo es que creas 2 chars, puesto y administrativo = 0, pero lo que no sabes es que al dar el valor de cero le estas asignando el valor NULL en decimal conforme a la tabla asc2, lo que no se como haces es para introducir el valor NULL por teclado, aun que elijas '0' cero no es '\0'(NULL), luego pides el puesto, y lo comparas con if ( puesto == administrativo ) pero como dije administrativo vale '\0'(NULL) por que has echo administrativo = 0 y eso es asignar a administrativo el primer char de la tabla asc2, es un carácter no imprimible, no se si puedes hacer la lectura por teclado de esa tecla, por que vas a poner cero y cero si que es un char, es el '0', comparación medio difícil o eso creo. Lo que si puedes hacer es da a administrativo el valor 'a', entonces sí cuando entres por teclado el char 'a' va poder hacerse una comparación. Pero no estoy seguro al 100% de eso que dije, así que a hacer pruebas, si no consigues entrar a ese if será por eso.

Bueno hice pruebas y creo que si, llevo la razón en lo anterior dicho sobre el NULL, mejor cambiar ese 0 por '0' o por 'a' de administrativo luego elijes 0 o a y funcionará perfecto.

En fin, dejo aquí el programa medianamente arreglado. Si no funciona o tienes dudas comente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*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 = 'a';
    int deuda, dias, sueldo;
 
    cout << "Ingrese puesto del empleado: ";
    cin >> puesto;  //elija 'a' para administrativo
 
    cout << "Ingrese el numero de dias que trabajo: ";
    cin >> dias;
 
    if ( puesto == administrativo ) {
        cout << "aIngrese el monto total de deuda con la empresa, si tiene";
        cin >> deuda;
 
        sueldo = ( 56000 * dias ) - deuda;
 
        cout << "El total a pagar es: ";
    }else{
        cout << "bIngrese el monto total de deuda con la empresa, si tiene";
        cin >> deuda;
        sueldo = ( 48000 * dias ) - deuda;
 
    }
 
    cout << "El total a pagar es: ";
    //... continuará XD
    return 0;
 
}
Suerte. Espero que sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consola no ejecuta el programa

Publicado por Alejandro Mejia (4 intervenciones) el 03/08/2015 05:49:36
Mira tengo windows 8 64 bits utilizo Visual Studio 2015 y Dev 5.4 en ambos tengo el mismo problema.
Pero haciendo lo que dices si me funciono, le di el valor de 'a' a administrativo y ya me deja ingresar los demás datos, pero me gustaría que el usuario pudiera poner la palabra del área como tal en cambio del valor con el que la inicialice ('a'), porque pienso que el usuario podría confundirse si no sabe que es así a menos que le mostrara un mensaje pidiéndole que ingrese a para operativo o "o" para operativo pero no me parecería intuitivo, no se si me hago entender. En fin así es como lo deje

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
using namespace std;
 
int main()
{
	char puesto, administrativo='a', operativo='o';
	int deuda, dias, sueldo;
 
	cout << "\nIngrese puesto del empleado: ";
	cin >> puesto;
 
	cout << "\nIngrese el numero de dias que trabajo: " ;
	cin >> dias;
	cout << "\nIngrese el monto total de deuda con la empresa, si tiene ";
	cin >> deuda;
	if (puesto == administrativo) {
 
		sueldo = (56000 * dias) - deuda;
 
	}
 
	else {
		if (puesto == operativo) {
 
			sueldo = (48000 * dias) - deuda;
		}
		else {
			cout << "\nNo a ingresado ninguno de os puestos";
		}
	}
	cout << "\nEl total a pagar es: " <<sueldo<<endl;
 
	system("pause");
}

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Consola no ejecuta el programa

Publicado por vangodp (287 intervenciones) el 03/08/2015 12:43:31
Pues si estas en C++ es fácil, use string.


string puesto;

cout << "cual es el puesto";
cin>>puesto;

if(puesto=="administrativo"){
//blablabla
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consola no ejecuta el programa

Publicado por Alejandro Mejia (4 intervenciones) el 04/08/2015 03:25:41
Tienes razón, no estaba seguro de la forma correcta de utilizar los string y se acomoda mas a la forma que yo quería utilizar, si embargo veo que tengo que estudiar mas acerca de la inicializacion y los valores que les damos para eso.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar