/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Mostrar lista de 10 en 10

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Azazel



Registrado: 01 Jul 2014
Mensajes: 2

MensajePublicado: 29/07/2014 7:08 pm
Título: Mostrar lista de 10 en 10

Tengo un proyecto de registro en un archivo txt, lo tengo todo preparado pero me pidieron que cuando le de mostrar el archivo me muestre la lista de 10 en 10. El programa me muestra los 10 primeros y luego los otros 10, pero, en vez de volver al menu, me muestra 10 veces lo ultimo introducido. Como hago que deje de mostrarme 10 veces el ultimo registro.
Copio parte del programa donde se cumple la condición:

void Lista_De_Ventas()
{
ifstream lectura;
lectura.open("Ventas.txt",ios::out|ios::in);
if(lectura.is_open()){

while(!lectura.eof()){

cout<<"\n\n\n\n\n\n\n\t\t################################"<<endl;
cout<<"\t\tREGISTROS DEL ARCHIVO Ventas.txt"<<endl;
cout<<"\t\t################################"<<endl;
cout<<endl;

for(int i=0; i<10; i++){

lectura>>cedula;
lectura>>nombre;
lectura>>apellido;
lectura>>monto;
lectura>>producto;

cout<<"\t\tCEDULA: "<<cedula<<endl;
cout<<"\t\tNOMBRE: "<<nombre<<endl;
cout<<"\t\tAPELLIDO: "<<apellido<<endl;
cout<<"\t\tMONTO: "<<monto<<endl;
cout<<"\t\tPRODUCTO: "<<producto<<endl;
cout<<"\t\t________________________________"<<endl;

}
getch();
system("cls");

}
system("cls");

}else{
cout<<"ERROR, EL ARCHIVO NO SE PUDO ABRIR, NO HA SIDO CREADO"<<endl;

}
lectura.close();

}//Fin funcion consultas

Como hago que deje de mostrarme 10 veces el ultimo registro.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7518
Ubicación: Mexico

MensajePublicado: 30/07/2014 9:00 am
Título:

El comportamiento que mencionas se debe a la función miembro eof, esta retorna verdadero solo si falla la ultima operación de lectura, en otras palabras eof se debe utilizar después de un intento de lectura, no antes (como es tu caso). Ademas el bucle interno realiza diez iteraciones sin importar si la lectura de cada registro es exitosa o no.

Para solucionarlo se debe colocar la verificación con eof utilizando un bucle do ... while y también se debe añadir en la condición del bucle interno la verificación de por lo menos el primer campo, de esta forma:
Código:
do {
   cout << "\n\n\n\n\n\n\n\t\t################################"<<endl;
   cout << "\t\tREGISTROS DEL ARCHIVO Ventas.txt"<<endl;
   cout << "\t\t################################"<<endl;
   cout << endl;
   
   for (int i = 0; i != 10 && lectura >> cedula; i++){
      lectura >> nombre;
      lectura >> apellido;
      lectura >> monto;
      lectura >> producto;
     
      // ...
   }
}while (!lectura.eof());

Con ello se debe solucionar el problema que mencionas, si no es así publica el código fuente completo y un ejemplo de la entrada del programa.

Ya por ultimo debes evitar el uso de getch ya que al ser parte de la biblioteca conio de Borland su soporte depende del compilador utilizado.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com