necesito ayuda con mi codigo :,v me compila y todo, la primera corrida sale sin errores sin embargo al calcular otro sueldo empiezan los errores
me salta la opcion de introducir el nombre del empleado y en capturar las horas trabajadas al imprimirlas me sale el codigo ascii es decir si pongo 10 horas me muestra una "i" :-\
ayuda porfavor alguien me dice como arreglarlo?
menu- (http://s33.postimg.org/dngtq925r/Captura.png)
primera corrida- (http://s33.postimg.org/7t1fa0e27/Captura3.png)
2 corrida (error) - (http://s33.postimg.org/cxhi0f3u7/Captura2.png)
el codigo
/*
*PROGRAMACION ESTRUCTURADA
*AUTOR: MENDEZ ACOSTA SEBASTIAN
*GRUPO: 2ABM
*TURNO: MATUTINO
*PRACTICA: SALARIO SENCILLO
*NO. 19.1
FECHA: 03/06/2016
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
//INICIO
{
//DECLARACION DE VARIABLES
char nombre[35];
int hrsTrab;
float cuotaHr, sueldosencillo;
int fin = 0;
int opcion;
char regreso;
//LIMPIAR PANTALLA
//clrscr();
while (fin == 0)
{
system("cls");
system ("color F2" );
printf("\t------------------------------------------------------\n");
printf("\t|PROGRAMA PARA CALCULAR EL SUENDO DE UN EMPLEADO |\n");
printf("\t------------------------------------------------------\n");
printf(" °°°°°°°°°°°°°°°°°°°°°");
printf("\n °1) INICIAR PROGRAMA°\n");
printf(" °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
printf("\n °2) BLOQUE DE IDENTIFICACION °\n");
printf(" °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
printf("\n °3) salir °\n");
printf(" °°°°°°°°°°°");
printf("\n °QUE ACCION DESEA REALIZAR?:°\n");
printf(" °°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n\n");
printf ("ingrese un numero del menu:");
scanf("%i", &opcion);
switch(opcion)
{
do{system("cls");
case 1:
system("cls");
//TITULO
printf("\t\t***********************************************");
printf("\n\t\tPROGRAMA PARA CALCULAR EL SUELDO DE UN EMPLEADO");
printf("\n\t\t***********************************************");
//INTRODUCIR DATOS
printf("\n\n\nNOMBRE DEL EMPLEADO: ");
//LEER DATOS
scanf("%s",&nombre);
//INTRODUCIR DATOS
printf("\nNUMERO DE HORAS TRABAJADAS: ");
//LEER DATOS
scanf("%i",&hrsTrab);
//INTRODUCIR DATOS
printf("\nINTRODUSCA LA CUOTA POR HORA: ");
//LEER DATOS
scanf("%f",&cuotaHr);
//CALCULAR UTILIZANDO IF
if(hrsTrab<=40)
{
sueldosencillo=hrsTrab*cuotaHr;
//SE MANDA A IMPRIMIR EL SUELDO SENCILLO
printf("\n|--------------------------------------| ");
printf("\n| SUELDO SENCILLO | ");
printf("\n|--------------------------------------| ");
printf("\n|EL NOMBRE DEL EMPLEADO ES: %s |",nombre);
printf("\n|--------------------------------------| ");
printf("\n|LAS HORAS TRABAJADAS FUERON: %i |",hrsTrab);
printf("\n|--------------------------------------| ");
printf("\n|EL SUELDO DEL EMPLEADO ES: %0.2f |",sueldosencillo);
printf("\n|--------------------------------------| ");
}
//FIN
printf("\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
printf("\n°DESEA CALCULAR EL SUELDO DE OTRO EMPLEADO (SI/NO)?");
scanf("%c",®reso);
getchar ();
}while(regreso == 'si');
//}while (regreso == 's' || regreso =='S' || regreso == 'SI' || regreso == 'Si' || regreso == 'si');
break;
case 2:
system("cls");
system ("color F8" );
printf("\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
printf("\n° PROGRAMACION ESTRUCTURADA °");
printf("\n° AUTOR: MENDEZ ACOSTA SEBASTIAN °");
printf("\n° GRUPO: 2ABM °");
printf("\n° TURNO: MATUTINO °");
printf("\n° PRACTICA: SALARIO SENCILLO °");
printf("\n° NO. 19.2 °");
printf("\n° FECHA: 03/06/2016 °");
printf("\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
getchar ();
fin = 1;
break;
case 3:
system("cls");
system ("color F8" );
printf("\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
printf("\n°PRESIONAR CUALQUIER <TECLA> PARA CONTINUAR...°");
printf("\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
getchar ();
fin = 1;
break;
default:
system("cls");
system ("color F2" );
printf ("\t\t\t=================\n");
printf ("\t\t\topcion no valida\n");
printf ("\t\t\t=================\n\n\n\n");
fin = 1;
fin = 0;
fin++;
break;
getchar ();
return 0;
}
}
}
:( :( :( :( :( :( :( :( :( :(
ayudaaaaaaaaaaaaaaaaaaaaaaaa D::::::
2 cosas:
1)no creas que todos los integrantes de la lista están aquí solo para ayudarte a tí (aprende a tener paciencia, y a soportar la frustración, quizá hasta no te contesten alguna vez)
2) ¿intentaste vaciando el buffer? después de cada scanf de los datos con la sentencia:
fflush(stdin);
La variable regreso es carácter no Cadena nunca va a ser igual a "si", ademas no se pueden comparar cadenas con == se necesita strcmp o strncmp.
}while(regreso == 'si');
y sobre lo de fflush esta indefinido para stdin funciona en algunos compiladores y sistemas pero no en todos, por lo cual no hay que recomendarlo tanto
Se tiene que leer la cadena con fgets.
char regreso[10];
///...
fgets(regreso,10,stdin);
}while(strncmp(regreso,"si",2)==0);
Tambien lo que comentas deo nombre.
Necesitas reinicializar la variable nombre y todas las demas en cada ciclo.
Iguala los enteros a 0 y las cadenas limpialas con memset
memset(nombre,0,35);
Y como te comente antes lee las cadenas con fgets.
ese i que te aparece es el i del "si" como solo lees un caracter con getchar.. el "ese" queda en "regresar" y el i pasa inmediatamente al nombre... repito esto no pasaria si les con fgets.. incluso puedes leer los numeros con fgets a un.buffer temportal y despues transformarlos a entero con atoi o con sscanf.
Saludo
gracias a todos ya pude resolverlo el problema era que tenia algunas variables char como %s y mas abajo del codigo la tenia como %c las puse todas como %s y funciono graciasss! ;D ;D ;D ;D ;D :rolleyes: :rolleyes: :rolleyes: ;-) ;-)