Error al retornar una linea de un archivo en C++

Iniciado por Elmisteriokay, 5 Junio 2018, 18:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Elmisteriokay

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]

SrMcLister

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!
Código (cpp) [Seleccionar]

return((u.areHappy() && u.knowIt()) ? u.clapYourHands() : u.goFuckYourself());

MAFUS

#2
¿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;
}