Dudas sobre Programar en C++

Iniciado por blablablabla, 5 Agosto 2016, 17:06 PM

0 Miembros y 2 Visitantes están viendo este tema.

blablablabla

Estoy intentando leer una cantidad de datos para asignarlo al espacio de un arreglo (vector) usando un ifstream, pero el programa me los asigna de manera errada, no asignando el valor correcto de cada hora. La tabla que esta abajo es un ejemplo del input data para el codigo.

Hora              Valor
00:00                0
01:00                0
02:00                0
03:00                4560
04:00                150
05:00                0
06:00                0

Estoy usando esta parte del codigo para leer los valores y asignarlo al espacio del arreglo Minlet.

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>

ifstream inFile;   inFile.open("data_Minlet_Andasol1.txt");
    if (inFile.fail()){ cout << "Error Opening File" <<endl; exit(0); }

    string lecture;

    for (i=0; i<tmax; i++)
        inFile>>lecture>>Minlet;

Los valores estoy tomando desde un archivo de texto que solamente contiene los valores (sin las horas) como si el archivo fuera el siguiente:

0
0
0
4560
150.3
0
0

Al correr el codigo, no me asigna los valores en las posiciones correctas y no me distingue entre el 4560 y el 150.3

¿Alguien tiene idea de como leer los valores de un archivo de texto (como el de arriba), asignar cada valor a un espacio de un arreglo para despues usar ese arreglo?.

Estoy un poco confundido y no tengo mucha experiencia programando.

ivancea96

Código (cpp) [Seleccionar]
for (i=0; i<tmax; i++)
    inFile>>lecture>>Minlet;

Estás leyendo 1 valor y guardándolo en lecture, y otro para guardarlo en Minlet.

querrías decir:
Código (cpp) [Seleccionar]
for (i=0; i<tmax; i++)
    inFile>>Minlet[i];

Para guardarlo en Minlet.
no sé qué es Minlet, así que no sé si eso es correcto. Suponiendo que es un vector<string> con un tamaño de tmax, funcionaría. Si el vector tiene tamaño 0, entonces sería:
Código (cpp) [Seleccionar]
for (i=0; i<tmax; i++){
    inFile>>lecture;
    Minlet.push_back(lecture);
}


O:
Código (cpp) [Seleccionar]
Minlet.resize(tmax);
for (i=0; i<tmax; i++)
    inFile>>Minlet[i];

blablablabla

OK. Minlet es un vector, que tiene tamaño conocido y lo declare de esta manera.

vector<double> Minlet(tmax+1)

El punto es que es una lista de 8000 datos y estoy corriendo para varios casos. Quiero que del archivo .txt pueda asignar cada dato de esos 8000 a un espacio del vector Minlet. Estoy probando con 24 horas, pero no me los asigna correctamente.

Cuando te refieres a que esta leyendo 1 valor, es solamente a un digito?

Gracias por tu ayuda

blablablabla

Alguien tiene idea de como hacer eso? Necesito ayuda para eso, porque solo se me ocurre poner los datos de manera manual

ivancea96

1 número. Pero como lo tenías, leías 2 veces, osea que leías 2 líneas.

Probaste este?
Código (cpp) [Seleccionar]
for (i=0; i<tmax; i++)
    inFile>>Minlet[i];

blablablabla

Funciono perfecto. Muchas gracias, ahora si los leyó correctamente.

Ahora, ¿porque razón leía 2 lineas en vez de 1?

ivancea96

Código (cpp) [Seleccionar]
inFile>>lecture>>Minlet[i];

Es equivalente a:
Código (cpp) [Seleccionar]
inFile>>lecture;
inFile>>Minlet[i];

Eso es, leer primero una string, y luego un número. 2 líneas.

blablablabla

Muchas gracias por tu ayuda ivancea96