Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cero++ en 4 Enero 2019, 02:26 am



Título: Problema con manejo de archivo de texto - Consulta
Publicado por: Cero++ en 4 Enero 2019, 02:26 am
Buenas gente, tengo un pequeño inconveniente, el problema es este, en el main cuando leo el string "nom_ape" usando el getline, no continua el programa y se cierra, sin permitirme la lectura de "nota1" y "nota2" y produciendo un mal funcionamiento de las funciones.
Les adjunto el código para ver si pueden ver el por qué sucede esto.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <vector>
  5. using namespace std;
  6. struct Alumno{
  7. string nom_ape;
  8. float nota1,nota2;
  9. };
  10. istream& operator>>(istream &i, Alumno &A){
  11. getline(i,A.nom_ape);
  12. i>>A.nota1>>A.nota2;
  13. i.ignore();
  14. return i;
  15. }
  16. ostream& operator<<(ostream &o, Alumno &A){
  17. o<<left<<A.nom_ape<<endl;
  18. o<<left<<A.nota1<<setfill(' ')<<setw(2)<<A.nota2<<endl;
  19. return o;
  20. }
  21. //A
  22. void Modificar_archi(Alumno A, vector <Alumno> &D);
  23. //B
  24. void Promedio_archi(vector <Alumno> &D);
  25. int main(int argc, char *argv[]) {
  26. vector<Alumno> V; Alumno A;
  27. ifstream lectura;
  28. lectura.open("Unidad 5 - Nro 2 - Lista.txt");
  29. if(!lectura.is_open()){
  30. cerr<<"Archivo no abierto";
  31. exit(-1);
  32. }
  33. while(lectura>>A){
  34. V.push_back(A);
  35. }
  36. lectura.close();
  37. //A
  38. cout<<"Ingrese el nombre del alumno y su apellido"<<endl;
  39. getline(cin,A.nom_ape);
  40. cin.ignore();
  41. cout<<"Ahora ingrese sus dos notas"<<endl;
  42. cout<<"Nota 1: "; cin>>A.nota1;
  43. cout<<"Nota 2: "; cin>>A.nota2;
  44. Modificar_archi(A,V);
  45. //B
  46. Promedio_archi(V);
  47. return 0;
  48. }
  49. //A
  50. void Modificar_archi(Alumno A, vector <Alumno> &D){
  51. for(size_t i=0;i<D.size();i++) {
  52. if(A.nom_ape==D[i].nom_ape){
  53. D[i].nota1=A.nota1;
  54. D[i].nota2=A.nota2;
  55. }
  56. }
  57. ofstream escritura;
  58. escritura.open("Unidad 5 - Nro 2 - Lista.txt",ios::trunc);
  59. for(size_t i=0;i<D.size();i++) {
  60. escritura<<D[i];
  61. }
  62. escritura.close();
  63. }
  64. //B
  65. void Promedio_archi(vector <Alumno> &D){
  66. float condicion_final; Alumno aux;
  67. ofstream escritura;
  68. escritura.open("Unidad 5 - Nro 2 - Promedio.txt");
  69. if(!escritura.is_open()){
  70. cerr<<"Archivo no abierto"<<endl;
  71. exit (-1);
  72. }
  73. for(size_t i=0;i<D.size();i++) {
  74. condicion_final=(D[i].nota1+D[i].nota2)/2;
  75. escritura<<D[i];
  76. if(condicion_final>=60){
  77. escritura<<"Condicion final: "<<"Aprobado"<<endl;
  78. }else{
  79. escritura<<"Condicion final: "<<"Desaprobado"<<endl;
  80. }
  81. }
  82. escritura.close();
  83. }