Problema con manejo de archivo de texto - Consulta

Iniciado por Cero++, 4 Enero 2019, 02:26 AM

0 Miembros y 1 Visitante están viendo este tema.

Cero++

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 (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
using namespace std;
struct Alumno{
string nom_ape;
float nota1,nota2;
};
istream& operator>>(istream &i, Alumno &A){
getline(i,A.nom_ape);
i>>A.nota1>>A.nota2;
i.ignore();
return i;
}
ostream& operator<<(ostream &o, Alumno &A){
o<<left<<A.nom_ape<<endl;
o<<left<<A.nota1<<setfill(' ')<<setw(2)<<A.nota2<<endl;
return o;
}
//A
void Modificar_archi(Alumno A, vector <Alumno> &D);
//B
void Promedio_archi(vector <Alumno> &D);
int main(int argc, char *argv[]) {
vector<Alumno> V; Alumno A;
ifstream lectura;
lectura.open("Unidad 5 - Nro 2 - Lista.txt");
if(!lectura.is_open()){
cerr<<"Archivo no abierto";
exit(-1);
}
while(lectura>>A){
V.push_back(A);
}
lectura.close();
//A
cout<<"Ingrese el nombre del alumno y su apellido"<<endl;
getline(cin,A.nom_ape);
cin.ignore();
cout<<"Ahora ingrese sus dos notas"<<endl;
cout<<"Nota 1: "; cin>>A.nota1;
cout<<"Nota 2: "; cin>>A.nota2;
Modificar_archi(A,V);
//B
Promedio_archi(V);
return 0;
}
//A
void Modificar_archi(Alumno A, vector <Alumno> &D){
for(size_t i=0;i<D.size();i++) {
if(A.nom_ape==D[i].nom_ape){
D[i].nota1=A.nota1;
D[i].nota2=A.nota2;
}
}
ofstream escritura;
escritura.open("Unidad 5 - Nro 2 - Lista.txt",ios::trunc);
for(size_t i=0;i<D.size();i++) {
escritura<<D[i];
}
escritura.close();
}
//B
void Promedio_archi(vector <Alumno> &D){
float condicion_final; Alumno aux;
ofstream escritura;
escritura.open("Unidad 5 - Nro 2 - Promedio.txt");
if(!escritura.is_open()){
cerr<<"Archivo no abierto"<<endl;
exit (-1);
}
for(size_t i=0;i<D.size();i++) {
condicion_final=(D[i].nota1+D[i].nota2)/2;
escritura<<D[i];
if(condicion_final>=60){
escritura<<"Condicion final: "<<"Aprobado"<<endl;
}else{
escritura<<"Condicion final: "<<"Desaprobado"<<endl;
}
}
escritura.close();
}
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]