Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Lectura de archivo

Estas en el tema de Lectura de archivo en el foro de C/C++ en Foros del Web. El siguiente código, forma parte de un programa encargado de leer un archivo de texto, que contiene un valor unico por cada linea. La idea ...
  #1 (permalink)  
Antiguo 07/11/2008, 11:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 15 años, 6 meses
Puntos: 1
Lectura de archivo

El siguiente código, forma parte de un programa encargado de leer un archivo de texto, que contiene un valor unico por cada linea.
La idea es leer todos los valores y calcular el promedio.
El problema es que en la lectura se está repitiendo el último valor del archivo. (Ej, si se tiene 4,5,6, el programa lee 4,5,6,6)
Código:
void leeVentas(){
     int contador = 0;
     double valor, suma;
     ifstream ventas("ventas.txt");     
     while (!ventas.eof()){
        contador++;
        ventas >> valor;
        suma += valor;
        cout<<"ventas "<<contador<<" $ "<<valor<<endl;
     }
     ventas.close();
     cout<<"Total $ "<<suma<<endl;
     cout<<"Promedio de ventas del dia : $"<< suma/contador;
}
  #2 (permalink)  
Antiguo 07/11/2008, 13:02
 
Fecha de Ingreso: julio-2008
Mensajes: 21
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Lectura de archivo

Por lo pronto si no haces suma=0, al hacer suma+=valor, te va sumar basura+valor.

Lo de cogerte un valor más, no sé, igual entra en el bucle una vez más de la cuenta, prueba a poner un Do While, en vez de un while, así evalua la condición abajo.
  #3 (permalink)  
Antiguo 07/11/2008, 13:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Lectura de archivo

En cuanto a la variable suma, el sistema está tomando por defecto suma=0. De todas maneras, acepto que es mejor inicializarla a 0.
Por otro lado, anteriormente había ensayado el ciclo con DO WHILE, pero el resultado es el mismo. Se entra de nuevo a leer el último valor y lo asigna a la variable. Esto ocurre una sola vez.
  #4 (permalink)  
Antiguo 07/11/2008, 13:42
 
Fecha de Ingreso: julio-2008
Mensajes: 21
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Lectura de archivo

Si el archivo no tiene saltos de lineas, siempre puedes poner como condición que pare cuando encuentre 2 saltos de linea seguidos pero vamos yo creo que el código así tal como lo tienes tiene que funcionar, no entiendo porque duplica el último valor xDDD
  #5 (permalink)  
Antiguo 07/11/2008, 14:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Lectura de archivo

Cita:
Iniciado por Alvarodt Ver Mensaje
Si el archivo no tiene saltos de lineas, siempre puedes poner como condición que pare cuando encuentre 2 saltos de linea seguidos pero vamos yo creo que el código así tal como lo tienes tiene que funcionar, no entiendo porque duplica el último valor xDDD
Precisamente esa es mi pregunta!!!
  #6 (permalink)  
Antiguo 07/11/2008, 17:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Lectura de archivo

Documentándome, encontré un artículo sobre la lectura adelantada de archivos, para evitar la doble lectura del ultimo dato.

Lo que hice fue leer el primer dato antes de entrar al ciclo WHILE, y luego dentro del ciclo, vuelvo a leer pero al final del mismo.

El problema terminó...

De todas maneras, el comentario de Alvaro, me sirvió como base para la investigación. GRACIAS
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:36.