elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  getline
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: getline  (Leído 1,303 veces)
UserLoser

Desconectado Desconectado

Mensajes: 2


Ver Perfil
getline
« en: 20 Enero 2019, 16:55 pm »

Hola a todos. Llevo unos días aprendiendo a programar y este es el primer problema al que no le veo solución.
En el siguiente programa, el getline hace como si no existiera.Directamente no hace nada. Lo he probado en otro mini-programa y funciona perfectamente, pero en éste no.¿Sabéis qué sucede?

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

void EscribirEnFichero();
void LeerEnFichero();

int main(){
string PreguntaLeerOEscribir;
Vuelta1:
cout<<"Desea (E)scribir o (L)eer un archivo"<<endl;
cin>> PreguntaLeerOEscribir;
if ((PreguntaLeerOEscribir=="E") || (PreguntaLeerOEscribir=="e")){
EscribirEnFichero();
}
else if ((PreguntaLeerOEscribir=="L") || (PreguntaLeerOEscribir=="l")){
LeerEnFichero();
}
else {
cout<<"No ha escrito una opcion valida.Intentelo otra vez"<<endl;
goto Vuelta1;
}
return 0;
}

void EscribirEnFichero(){
char NombreArchivo[128];
string Texto;
cout<<"Que nombre desea que tenga el archivo"<<endl;
cin>>NombreArchivo;
cout<<"Que desea escribir en el archivo"<<endl;
getline(cin,Texto);                       //Este es el getline que no funciona

ofstream fichero (NombreArchivo);
fichero<<Texto<<endl;
fichero.close();

system("pause()");
}

void LeerEnFichero(){

}


« Última modificación: 20 Enero 2019, 17:37 pm por UserLoser » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: getline
« Respuesta #1 en: 20 Enero 2019, 17:27 pm »

Lo primero de todo pon tu código entre etiquetas de código GeSHi (dando a modificar mensaje y encima del cuadro de texto tienes la opción para elegirlas).

El problema que tienes es típico cuando se trabaja con cadenas de caracteres. Al introducir el nombre del archivo, introduces el nombre y le das a enter. Ese enter se queda en el buffer y cuando pides el texto, el enter del buffer pasa a la variable <Texto>. Por eso parece que se lo salta y si te fijas en el archivo creado tiene un salto de línea guardado.

En este mismo foro hay varios temas para tratar ese problema del buffer. Por favor, no uses el típico <fflush(stdin)> ya que para algo hemos tratado de buscar alternativas más correctas en los temas que te comento.

Aparte de eso te recomiendo que si vas a usar <string>, no mezcles con cadenas de <char>. Si creas un <string> para guardar el nombre del archivo luego sólo tienes que hacer esto para poder abrir el archivo:
Código
  1. string nombre_fichero = "nuevo.txt";
  2. ofstream fichero(nombre_fichero.c_str());
Con ese método transformas un <string> en una cadena <char>.

También te recomiendo que en vez de usar etiquetas y <goto()>, emplees un filtro <do while>. Lo que tú has hecho está más relacionado con implementaciones a bajo nivel. En lenguajes de alto nivel hay otras opciones como la que te he comentado, es más correcto.

Y en vez de usar <system("pause")>, te recomiendo usar <cin.get()>, el resultado es el mismo y te evitas hacer una llamada al sistema, lo cual es más costoso.

Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
UserLoser

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: getline
« Respuesta #2 en: 20 Enero 2019, 17:46 pm »

Muchas gracias, YreX-DwX, voy a buscar esos temas que mencionas. Ya he hecho lo del string, y voy a pensar como meter el do while, jeje.
Gracias de nuevo.
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: getline
« Respuesta #3 en: 20 Enero 2019, 18:05 pm »

Aquí te dejo el enlace al tema, ya que sino se te va a hacer un poco largo encontrarlo. Suerte :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
getline()
Programación C/C++
Geek7 3 11,565 Último mensaje 29 Julio 2010, 20:52 pm
por Geek7
cin.getline problemas en C++
Programación C/C++
vikour92 0 1,789 Último mensaje 23 Mayo 2012, 19:24 pm
por vikour92
cin.getline y cin.ignore
Programación C/C++
ricardo2013 6 4,560 Último mensaje 25 Octubre 2012, 17:01 pm
por rir3760
EOF con string y getline C++
Programación C/C++
fehnet 3 1,896 Último mensaje 16 Julio 2013, 14:20 pm
por fehnet
getline() !!!
Programación C/C++
chicainge 2 3,141 Último mensaje 14 Septiembre 2014, 19:22 pm
por chicainge
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines