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

Problema con cin.getline (variable, xxx)

Estas en el tema de Problema con cin.getline (variable, xxx) en el foro de C/C++ en Foros del Web. Hola que tal soy nuevo en el foro me gustaria presentarme. Me llamo Lucas y hace rato que me gusta la programación y decidí meterme ...
  #1 (permalink)  
Antiguo 12/01/2011, 13:48
 
Fecha de Ingreso: enero-2011
Ubicación: Argentina
Mensajes: 4
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Problema con cin.getline (variable, xxx)

Hola que tal soy nuevo en el foro me gustaria presentarme.

Me llamo Lucas y hace rato que me gusta la programación y decidí meterme un toke mas en esto. Tengo 18 años y soy de argentina.

Ahora les dejo mi problemita estoy haciendo un trabajito(mas abajo dejo el codigo) El tema es que cuando uso "cin.getline(elnombredelavariable,xxxx);" me dice que no pudo abrir el archivo. osea el tema va asi el usuario debe poder ingresarle el nombre al archivo y con cin.getline(); no me funciona (en ciertos casos como el que les voy a psar ahora), estuve viendo que podria llegar a causar el problema y llegue a que en la función menu cuando le coloco al switch una variable cuyo valor debe ser ingresada para el usuario me salta el problema. si le saco eso el codigo funciona de 10.


Alguno me podria ayudar?

Agradezco mucho su ayuda

Saludos

mi mail: [email protected]







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

int crear_nuevo_mensaje();
int menu();

int main()
{
menu();
system ("pause");
}


int menu(){

    int e;
    cin >> e;
    switch (e){
    case 1:
        crear_nuevo_mensaje();
        break;
    }
return 0;
}

int crear_nuevo_mensaje(){
char nombreArchivo[250]; //contendra el nombre del archivo
char buffer[588]; //contendra el contenido del usuario
char asunto[250];

//solicitamos el nombre de archivo
cout << "Nombre del archivo: ";
cin.get (nombreArchivo, 250);
//eliminamos el caracter de nueva linea despues de introducir el nombre del archivo
//si no lo eliminamos, getline, recoge del buffer el salto de linea, y es como si
// hubieramos pulsado intro sin introducir ningun caracter.
cin.ignore(1,'\n');

//abrimos el archivo para escritura.
//Si el archivo ya existe, su contenido se elimina
ofstream fout(nombreArchivo);
//si no se puede abrir...
if(fout.fail())
{
cout << "No se puede abrir el archivo " << nombreArchivo << endl;
return 1;
}

fout << "Esta linea se escribe directamente en el archivo\n";
//solicitamos texto al usuario para añadirlo en el archivo
cout << "Escribe el texto para añadirlo en el archivo: ";
//recogemos un máximo de 254 caracteres. El ultimo sera el final de linea '\0'
cin.getline(buffer,588);
//guardamos la información introducida en el archivo
fout << buffer << "\n";
//cerramos
fout.close();

//mostramos el contenido del archivo
//abrimos el archivo para lectura
ifstream fin(nombreArchivo);
//comprobamos si se ha abierto correctamente
if(fin.good())
{
char ch;
cout << "\n***** contenido del archivo *****\n";
//vamos leyendo caracter a caracter y lo vamos mostrando.
while (fin.get(ch))
cout << ch;
cout << "\n***** fin contenido del archivo *****\n";
//cerramos
fin.close();
}

return 0;
}
  #2 (permalink)  
Antiguo 12/01/2011, 17:50
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Problema con cin.getline (variable, xxx)

el problema que da es que no deja meter el nombre del archivo y te da error.

esto se debe a que al meter el valor de "e", el 1 se guarda en "e" pero el \n del intro se queda guardado en el buffer. entonces al hacer cin.get para pedirte el nombre del archivo, coge automaticamente el \n y por eso no te deja meter el nombre y te da error.

la solucion es liberar el buffer antes del cin.get


Código C++:
Ver original
  1. cout << "Nombre del archivo: " << flush;
  2. cin.ignore();
  3. cin.get (nombreArchivo, 250);

en este caso estoy ignorando lo que hay en el buffer de cin. he utilizado esta funcion por que no me se la de liberar el buffer en C++ (en C seria fflush(stdin); ).

Etiquetas: cin, cin.getline(), espacios, nombre
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 19:55.