Dev - C++ - ficheros

 
Vista:

ficheros

Publicado por xxxx (10 intervenciones) el 08/02/2006 13:11:10
Hola a todos, tengo un problema, el caso es que no se porque con el Dev-c++ no puedo ejecutar un programa en el que abra varias veces un fichero, solo me permite abrirlo para escritura una vez y luego una para lectura, pero si intento abrirlo varias veces para lectura porque tengo varia opciones en las que lo necesito no me deja, me da error de apertura.
Solo me deja ejecutar la opcion del menu que seleccione primero, luego ya me da ERROR porque??????????????????

Ejemplo: Programa que genere un fichero y mediante un menu determine el numero de elementos y si esta o no ordenado

#include<iostream.h>
#include<fstream.h>
struct elem{ char info[20];
int clave;};
void crear(fstream &f);
int contar(fstream &f);
int orden(fstream &f);
int main()
{ fstream f;
int opc,x;
crear(f);
do{do{system("cls");
cout<<"MENU"<<endl;
cout<<"1.- Numero de elementos del fichero."<<endl;
cout<<"2.- Ver si esta ordenado el fichero."<<endl;
cout<<"3.- Salir."<<endl;
cin>>opc;}while((opc<1)||(opc>3));
switch(opc)
{ case 1: x=contar(f);
cout<<"En el fichero hay "<<x<<" elementos."<<endl;
break;
case 2: if(orden(f)==0)
cout<<"El fichero no esta ordenado."<<endl;
else cout<<"El fichero esta ordenado."<<endl;
}
system("pause");
}while(opc!=3);
return 0;
}
void crear(fstream &f)
{ elem e;
int res;
f.open("fichero.dat",ios::out);
if(f==0)
cout<<"Error de apertura del fichero."<<endl;
else{do{cout<<"Introduzca la información: "<<endl;
cin>>e.info;
do{cout<<"Introduzca la clave:"<<endl;
cin>>e.clave;}while(e.clave<=0);
f.write((char*)&e,sizeof(elem));
do{cout<<"Desea introducir mas elementos?(0/1)"<<endl;
cin>>res;}while((res!=0)&&(res!=1));
}while(res!=0);
f.close();
}
}
int contar(fstream & f)
{ elem e;
int cont=0;
f.open("fichero.dat",ios::in);
if(f==0)
cout<<"Error de apertura en contar."<<endl;
else{ f.read((char*)&e,sizeof(elem));
while(!f.eof())
{ cont++;
f.read((char*)&e,sizeof(elem));
}
f.close();
return (cont);
}
}
int orden(fstream & f)
{ elem e1,e2;
int ordenado;
f.open("fichero.dat",ios::in);
if(f==0)
cout<<"Error de apertura del fichero.\n";
else{f.read((char*)&e1,sizeof(elem));
if(f.eof())
ordenado=1;
else{f.read((char*)&e2,sizeof(elem));
while((!f.eof())&&(e1.clave< e2.clave))
{e1=e2;
f.read((char*)&e2,sizeof(elem));
}
if(f.eof()!=0)
ordenado=1;
else ordenado=0;
}
f.close();
}
return (ordenado);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder