Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: el1000erroresxd en 4 Junio 2016, 04:47 am



Título: ayuda xd regresar al menu con do while dev c++!!1
Publicado por: el1000erroresxd en 4 Junio 2016, 04:47 am
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

Código:
/*
*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;
}
}
}


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


Título: Re: ayuda xd regresar al menu con do while dev c++!!1
Publicado por: el1000erroresxd en 4 Junio 2016, 05:33 am
ayudaaaaaaaaaaaaaaaaaaaaaaaa D::::::


Título: Re: ayuda xd regresar al menu con do while dev c++!!1
Publicado por: tincopasan en 4 Junio 2016, 08:48 am
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:
Código
  1. fflush(stdin);
  2.  


Título: Re: ayuda xd regresar al menu con do while dev c++!!1
Publicado por: AlbertoBSD en 4 Junio 2016, 09:12 am
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.

Código
  1. }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.

Código
  1. char regreso[10];
  2. ///...
  3.  fgets(regreso,10,stdin);
  4. }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

Código
  1. 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




Título: Re: ayuda xd regresar al menu con do while dev c++!!1
Publicado por: el1000erroresxd en 5 Junio 2016, 01:24 am
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: ;-) ;-)