Les adjunto el código para ver si pueden ver el por qué sucede esto.
Código
#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(); }