Mostrar lista de 10 en 10

Foro para los que usan Dev-C++.
Responder
Mensaje
Autor
Azazel
Mensajes: 2
Registrado: 01/07/2014 10:51 am

Mostrar lista de 10 en 10

#1 Mensaje por Azazel » 29/07/2014 7:08 pm

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.

Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

#2 Mensaje por rir3760 » 30/07/2014 9:00 am

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: Seleccionar todo

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

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado