| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Azazel
Registrado: 01 Jul 2014 Mensajes: 2
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |