Foro de elhacker.net

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
  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<fstream>
  5. #include<sstream>
  6. using namespace std;
  7.  
  8. string leer(string nombreArchivo,int linea){
  9. string lineas;
  10. ifstream archivo;
  11. archivo.open(nombreArchivo.c_str(),ios::in);
  12. int contador = 1;
  13. if(archivo.fail()==true){ //Fallo al abrir el archivo
  14. cout<<"No se pudo abrir el archivo..."<<endl;
  15. cin.ignore(cin.rdbuf()->in_avail()+1);
  16. exit(0); //Sale del programa
  17. }
  18.  
  19. while(getline(nombreArchivo,lineas)){
  20. if(contador == linea)
  21. return lineas;
  22. else{
  23. contador++;
  24. }
  25. }
  26. archivo.close();
  27. }
  28.  
  29. int main(int argc,char *argv[]){
  30. string nombreArchivo;
  31. cout<<"Digite el nombre del archivo: ";
  32. getline(cin,nombreArchivo);
  33.  
  34.  
  35. cout<<leer(nombreArchivo,2)<<endl;
  36. return 0;
  37. }[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
  1. 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
  1. string leer(string nombreArchivo,int linea){
  2.    string lineas;
  3.    ifstream archivo;
  4.    archivo.open(nombreArchivo.c_str(),ios::in);
  5.    int contador = 1;
  6.    if(archivo.fail()==true){ //Fallo al abrir el archivo
  7.        cout<<"No se pudo abrir el archivo..."<<endl;
  8.        cin.ignore(cin.rdbuf()->in_avail()+1);
  9.        exit(0); //Sale del programa
  10.    }
  11.  
  12.    while(getline(archivo,lineas)){
  13.        if(contador == linea)
  14.            break;
  15.        else{
  16.            contador++;
  17.        }
  18.    }
  19.    archivo.close();
  20.    return lineas;
  21. }