ayuda xd regresar al menu con do while dev c++!!1

Iniciado por el1000erroresxd, 4 Junio 2016, 04:47 AM

0 Miembros y 2 Visitantes están viendo este tema.

el1000erroresxd

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-

primera corrida-

2 corrida (error) -

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",&regreso);
   
    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;
}
}
}



:( :( :( :( :( :( :( :( :( :(

el1000erroresxd


tincopasan

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

AlbertoBSD

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


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

el1000erroresxd

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: ;-) ;-)