Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Elmisteriokay en 5 Junio 2018, 18:34 PM

Título: Error al retornar una linea de un archivo en C++
Publicado por: Elmisteriokay en 5 Junio 2018, 18:34 PM
Me sale un error ¿por que?
Código (cpp) [Seleccionar]
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>
#include<sstream>
using namespace std;

string leer(string nombreArchivo,int linea){
string lineas;
ifstream archivo;
archivo.open(nombreArchivo.c_str(),ios::in);
int contador = 1;
if(archivo.fail()==true){ //Fallo al abrir el archivo
cout<<"No se pudo abrir el archivo..."<<endl;
cin.ignore(cin.rdbuf()->in_avail()+1);
exit(0); //Sale del programa
}

while(getline(nombreArchivo,lineas)){
if(contador == linea)
return lineas;
else{
contador++;
}
}
archivo.close();
}

int main(int argc,char *argv[]){
string nombreArchivo;
cout<<"Digite el nombre del archivo: ";
getline(cin,nombreArchivo);


cout<<leer(nombreArchivo,2)<<endl;
return 0;
}[code=cpp]
[/code]
Título: Re: Error al retornar una linea de un archivo en C++
Publicado por: SrMcLister en 5 Junio 2018, 19:17 PM
Si te salta el error en la linea 19, prueba en vez de getline a usar el feof o eof del fichero y comentas el resultado.
Código (cpp) [Seleccionar]

while(!feof(nombreArchivo))


Un saludo!
Título: Re: Error al retornar una linea de un archivo en C++
Publicado por: MAFUS en 5 Junio 2018, 21:08 PM
¿Qué error te da el compilador?


Vale getline, en el primer argumento le pasas el nombre archivo cuando debes pasar su manejador. De igual forma debes reestructurar la función para que termine con un return. Algo así:
Código (c++) [Seleccionar]
string leer(string nombreArchivo,int linea){
    string lineas;
    ifstream archivo;
    archivo.open(nombreArchivo.c_str(),ios::in);
    int contador = 1;
    if(archivo.fail()==true){ //Fallo al abrir el archivo
        cout<<"No se pudo abrir el archivo..."<<endl;
        cin.ignore(cin.rdbuf()->in_avail()+1);
        exit(0); //Sale del programa
    }

    while(getline(archivo,lineas)){
        if(contador == linea)
            break;
        else{
            contador++;
        }
    }
    archivo.close();
    return lineas;
}