• Viernes 8 de Noviembre de 2024, 16:00

Autor Tema:  funcion de entrada que no se cuelgue  (Leído 948 veces)

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
funcion de entrada que no se cuelgue
« en: Sábado 3 de Julio de 2010, 19:54 »
0
estoy trabajndo  en un codigo con vectores , donde tengo  que introducir un  valor tipo cadena , el problema  es que la primera iteracion del ciclo for  anda bien , pero cuando voy  a introducir  la cadena de caracteres en la segunda iteracion del ciclo for, salta en esta parte , no dejandome ingresar los valores tipo cadena de caracteres mejor les pongo  el codigo  y juzguen ud mismos;
Código: C++
  1.  
  2.  
  3. #include<iostream>
  4. #include<conio2.h>
  5. #include<cstdio>
  6. #include<string.h>
  7.  
  8. using namespace std;
  9. void ingresar();
  10. int l,j;
  11. struct empleado{
  12. char nombre[25];
  13. int up[30];
  14. }p[30];
  15.  
  16. int main()
  17. {
  18.  
  19. for(j=1;j<=30;j++)
  20. {
  21. system("cls");
  22. ingresar();
  23. }
  24. system("pause");
  25. return 0;
  26. }
  27.  
  28. void ingresar()
  29. {
  30. int i=0,k,n=0;
  31. cout<<"nningrese su nombre: ";
  32. cin.getline(p[j].nombre,70);//me gustaria reemplazar esta funcion por otra
  33. //que se funcional en todo el ciclo for
  34. while(i<5)
  35. {
  36. i=i+1;
  37. cout<<"ningrese las unidades producidas/dias"<<endl;
  38. cin>>p[j].up[i];
  39.  
  40. n=n + p[j].up[i];
  41.  
  42. }
  43. system("cls");
  44. k=n/5;
  45. cout<<" producion total mes/empleado: "<<n<<endl;
  46. cout<<"promedio produccion dia/empleado: "<<k<<endl;
  47. system("pause");
  48. }
  49.  
  50.  
  51.  

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: funcion de entrada que no se cuelgue
« Respuesta #1 en: Martes 6 de Julio de 2010, 03:39 »
0
Código: C++
  1. #include<iostream>
  2. //#include<conio.h>
  3. //#include<cstdio>
  4. //#include<string.h>
  5.  
  6. using namespace std;
  7.  
  8. void ingresar();
  9. int j;
  10. struct empleado
  11. {
  12.     char nombre[25];
  13.     int up[30];
  14. }p[3];
  15.  
  16. int main()
  17. {
  18.     for(j=0;j<3;j++)
  19.     {
  20.          //system("cls");
  21.          ingresar();
  22.     }
  23.     system("pause");
  24.     return 0;
  25. }
  26.  
  27. void ingresar()
  28. {
  29.      int i=0,k = 0,n=0,s=0;
  30.      s =j;
  31.      cout<<"nningrese su nombre: "<<j<<"  ";
  32.      cin.getline(p[s].nombre,25);//me gustaria reemplazar esta funcion por otra
  33.      //que se funcional en todo el ciclo for
  34.      while(i<5)
  35.      {
  36.           cout<<"ningrese las unidades producidas/dias"<<endl;
  37.           cin>>p[s].up[i];
  38.           n=n + p[s].up[i];
  39.           i++;
  40.      }
  41.      //system("cls");
  42.      k=n/3;
  43.      cout<<"el nombre es: "<<p[s].nombre<<endl;
  44.      cout<<" producion total mes/empleado: "<<n<<endl;
  45.      cout<<"promedio produccion dia/empleado: "<<k<<endl;
  46.      cin.ignore();
  47.      //system("pause");
  48. }
  49.  
  50.  
  51.  

Bueno Aqui esta el codigo, para comenzar, debes cuidar bien el tamaño de la cadena, en este caso 25 caracteres, debes cuidar las refencias de las variables globales y las locales, es ineficinete y mala practica utilizar variables globales x ejemplo int j; sobre una funcion, es recomendable usarlo dentro de la funcion ingresar(), la buena programacion se trata q las funciones sean reutilizables en otros codigos, y en este caso no lo es... bueno y por ultimo despues de cada ciclo cuando llamas cin.getline se lee una cadena o string, y qda algunos caracteres en memoria como ''' o 'n' y para limpiarlo se usa x ejemplo un cin.ignore() al final para asegurar q volvera a leer un nuevo contenido.... cualquier otra cosa me preguntas