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

Problema leyendo ficheros en c++

Estas en el tema de Problema leyendo ficheros en c++ en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un programa que lea un fichero con la siguiente estructura: Código: 4 a23fdssc ascda223 asd - El primer número indica el número ...
  #1 (permalink)  
Antiguo 15/04/2011, 16:09
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 1
Busqueda Problema leyendo ficheros en c++

Hola, estoy haciendo un programa que lea un fichero con la siguiente estructura:
Código:
4
a23fdssc
ascda223
asd
-
El primer número indica el número de líneas que tiene el fichero a continuación y lo que tiene que hacer el programa es contar el número de carácteres que tiene cada línea. Para ello he hecho el siguiente intento (ejecuto el programa redirigiendo el archivo a cin)

Código:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int lineas;
    string s;
    cin >> lineas;  //leo el primer valor del archivo, lo lee bien

    for(int i=0; i<lineas; i++) 
    {
        getline(cin,s);                    //leo una línea como string
        cout << s.size() << endl;  //miro la longitud
    }
    return 0;
}
El problema que tengo es que por alguna razón en la primera iteración del for getline lee una string vacía. No tengo ni idea de por qué pasa esto. Si leo el primer valor como string y convirtiéndola a int otra vez (para asegurarme de que en la primera linea leyera el salto de linea \n ) con el mismo problema.

Gracias por adelantado
  #2 (permalink)  
Antiguo 15/04/2011, 16:21
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 19 años, 5 meses
Puntos: 9
Respuesta: Problema leyendo ficheros en c++

mmm y en que momento usas archivo en codigo?
  #3 (permalink)  
Antiguo 15/04/2011, 16:34
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Problema leyendo ficheros en c++

Ejecuto el código con el comando

Código:
./programa < archivo.txt
Con lo cual el flujo de entrada cin se corresponde con el archivo, no con el teclado. Por lo tanto cuando hago cin >>lineas estoy leyendo la primera linea del archivo.
  #4 (permalink)  
Antiguo 15/04/2011, 17:52
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Problema leyendo ficheros en c++

Cuando haces cin del numero (lineas), el salto de linea queda en el buffer, así que el primero string del bucle obtiene simplemente el salto de linea que quedo.

Esto lo puedes solucionar fácilmente con cin.ignore() tras el cin>>lineas que ignora un carácter

Código:
//...

cin >> lineas;  //leo el primer valor del archivo, lo lee bien
cin.ignore();

//...
__________________
Foros Desarrollo de Juegos
  #5 (permalink)  
Antiguo 16/04/2011, 02:13
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Problema leyendo ficheros en c++

Usando cin.ignore() ya me funciona correctamente. Muchas gracias por la ayuda.
  #6 (permalink)  
Antiguo 16/04/2011, 17:56
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Problema leyendo ficheros en c++

De nada
__________________
Foros Desarrollo de Juegos

Etiquetas: c++, getline, longitud, strings
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 08:53.