Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/02/2013, 09:16
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 5 meses
Puntos: 83
Respuesta: Problema entrada datos (novato)

El primer indice de una lista es el 0, en el codigo estas declarando un incremental 'i' que para cada ciclo lo incrementas y luego lo usas como indice; el error está en que vas referenciando un elemento bajo un indice que está una posicion adelante de lo que tendria que estar, de forma que cuando llegas a la ultima lectura asignas los datos a un struct para el que no has guardado memoria (en la ultima lectura 'i' vale 2881, pero como el indexado comienza en 0, la posicion 2881 es en realidad el elemento 2882 para el que no has reservado memoria ok? )

Código:
i = 0;
while(archivo.good()) {
    archivo >> ob[i].fecha >> ob[i].hora >> ob[i].producion >> ob[i].velocidad;
    i++;
}

Algo mas, evita el hardcoded de datos:

Código:
struct observacion {
    char fecha[15];//aqui
    char hora[7];//aqui
    int producion;
    float velocidad;
} ob[2881];//y aqui
Para eso tienes que declarar otra cabecera con las definiciones para las longitudes y otros tipos de datos que vas a usar en la aplicacion, de forma que si necesitas modificar algo que has usado x veces por dentro del codigo solo necesitaras tocar el archivo de definiciones en vez de recorrer todo el codigo buscando y cambiando. Y lo del 'ob[2881]', si quieres usar este tipo de array entonces tendras que añadir un condicional dentro del ciclo de lectura para evitar que lea mas lineas de las que caben en el array: esto es un parche, no una forma correcta de solucionarlo; para solucionarlo tienes que usar vectores o listas.

Saludos
vosk