Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: phantoxG en 30 Noviembre 2016, 17:29 pm



Título: Problema con fichero binario en estructura
Publicado por: phantoxG en 30 Noviembre 2016, 17:29 pm
Quiero pasar una estructura de 18 bytes ( un char de 10, un float y un int) pero al llamar la funcion sizeof(); me dice que el tamaño es 20 y no se por que
Os dejo el codigo por aqui, la funcion es  bool guarda

Código:
#include<iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <fstream>

using namespace std;

bool ComprobarDNI(char dni[10]){  
int letras=0;
int numero=0;
string letrasdni="TRWAGMYFPDXBNJZSQVHLCKE";
int numerodni=stoi(dni);
int len= strlen(dni);
if(len!=9){
return false;
}
for(int i=0;i<len;i++){
if(isdigit(dni[i])){
numero++;
}
if((numero==8) && ((isdigit(dni[i])!=true))){
letras++;
}
}
if(numero==8 && letras==1){
if(letrasdni[numerodni % 23]==dni[8]){
cout<<"DNI correcto"<<endl;
return true;
}
else{
cout<<"DNI incorrecto"<<endl;
return false;
}
cout<<"DNI Correcto"<<endl;
}
else{
return false;
}
}


struct Alumno{
char dni[10];
int edad;
float nota;

void set(){
cout<<"Introduza dni del Alumno"<<endl;
cin>>dni;
while(ComprobarDNI(dni)==false){
cout<<"DNI erroneo, pruebe otra vez"<<endl;
cin>>dni;
}
cout<<"Introduzca edad"<<endl;
cin>>edad;
cout<<"Introduza nota"<<endl;
cin>>nota;
}
void print(int numero){
cout<<"Alumno numero "<<numero<<endl;
cout<<"DNI: "<<dni<<endl<<"Edad: "<<edad<<endl<<"Nota: "<<nota<<endl<<endl;
}
};

#ifdef MODOTEXTO
bool guarda (string ruta_fichero, Alumno v[10], int nal){
ofstream file;
file.open("fichero.txt");
if(file.is_open()==false){
cout<<"Error; El fichero no se pudo abrir"<<endl;
return false;
}
for(int i=0; i<nal;i++){
file<<v[i].dni<<" "<<v[i].edad<<" "<<v[i].nota<<endl;
}
return true;
}

int lee(string ruta_fichero, Alumno v[10]){
int leidos=0;
ifstream file;
file.open(ruta_fichero);
if(file.is_open()==false){
cout<<"Error; El fichero no se pudo abrir"<<endl;
system("pause");
}
while(file.eof()==false){
if(file>>v[leidos].dni>>v[leidos].edad>>v[leidos].nota){
leidos++;
}
}
}

#else
bool guarda(string ruta_fichero, Alumno v[10], int nal){
ofstream file;
file.open(ruta_fichero);
if(!file.is_open()){
return false;                            
}
file.write((char*) &v[0], 10*sizeof(Alumno));   EL PROBLEMA ESTA AQUI
}

#endif