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

Ingresar string con espacios

Estas en el tema de Ingresar string con espacios en el foro de C/C++ en Foros del Web. Buenas, me preguntaba si me podrían ayudar con un problema que he tratado de solucionar y si podrían darme consejos para el siguiente código. #include ...
  #1 (permalink)  
Antiguo 01/11/2014, 21:17
 
Fecha de Ingreso: noviembre-2014
Mensajes: 1
Antigüedad: 9 años, 5 meses
Puntos: 0
Ingresar string con espacios

Buenas, me preguntaba si me podrían ayudar con un problema que he tratado de solucionar y si podrían darme consejos para el siguiente código.

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

[HIGHLIGHT="C++"]
Código C++:
Ver original
  1. int main()
  2. {
  3.     //Ced: Cédula, Nom: Nombre, Ape: Apellido, Dir: Dirección, Tel: Teléfono, Op: Opción,
  4.     string Nom,Ape,Tel,Dir,Op;
  5.     char Ced[9];
  6.    
  7.     system("cls");//limpiamos pantalla
  8.     cout << "Bienvenido a nuestro sistema de matricula\n\n";
  9.     system("pause");
  10.     system("cls");
  11.    
  12.     do//hacer siempre que se cumpla el while
  13.     {
  14.         cout << "********* Menu de Inicio ********* \n\n0: Salir" <<endl;
  15.         cout << "1: Matricular\n\nElige una opcion: ";
  16.         cin >> Op;
  17.         system("cls");
  18.    
  19.         if(Op == "0")
  20.         {
  21.             cout << "Fin del Sistema\n\n";
  22.             system("pause");//Pausa la pantalla
  23.             return 0;//Sale del Programa
  24.         }
  25.    
  26.         else if(Op == "1")
  27.         {
  28.             ofstream Est;//Declaración del fichero
  29.             Est.open("Estudiante.dat");//Abrimos el fichero Estudiante.dat
  30.  
  31.             if(Est.good())//Se puede trabajar en el archivo
  32.             {
  33.                 cout << "Nombre: ";
  34.                 cin >> Nom;
  35.                 cout << "\nApellido: ";
  36.                 cin >> Ape;
  37.                 cout << "\nCedula: ";
  38.                 cin >> Ced;
  39.                 cout << "\nTelefono: ";
  40.                 cin >> Tel;
  41.                 cout << "\nDireccion: ";
  42.                 getline(cin, Dir);//No lee el comando y se lo "salta"
  43.                 cout << "\nMatricula Exitosa!\n\n";
  44.                 system("pause");
  45.                 Est << "Estudiante X\n\n<< Nombre: " << Nom << "\nApellido: " << Ape <<endl;
  46.                 Est << "Cédula: " << Ced << "\nTeléfono: " << Tel << "\nDirección: " << Dir <<endl;
  47.                 system("cls");
  48.                 Est.close();
  49.             }
  50.  
  51.             else//El archivo está corrupto
  52.             {
  53.                 cout << "El archivo no se pudo crear o abrir";
  54.                 system("pause");
  55.             }
  56.         }
  57.     }
  58.     while(Op != "0");//Si la opción ingresada es diferente a 0, se repite el ciclo
  59. }//Fin del main

A la hora de ingresar la dirección no lee el comando getline() y pasa a la línea siguiente, lo cambie por el cin pero solo el cin >> no lee los espacios, intente tambien con cin.getline() pero no da resultado.

Algún consejo?
  #2 (permalink)  
Antiguo 02/11/2014, 05:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Ingresar string con espacios

Hola:

La sentencia:
Código C++:
Ver original
  1. getline(cin, Dir);//No lee el comando y se lo "salta"
te lee el último (ENTER) que quedaba en el stream y se lo da a Dir....así que directamente Dir vale '\n' o retorno de carro.

Para quitar ese retorno, puedes poner antes un ignore().
Código C++:
Ver original
  1. cin.ignore();
  2. getline(cin, Dir);
  #3 (permalink)  
Antiguo 02/11/2014, 13:28
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ingresar string con espacios

puedes probar poner cin.sync(); luego despues de cada getline()

getline(cin, var);
cin.sync();

No se que ciencia exacta hace esto y me gustaría saber. Solo se que sincroniza el contenido de la variable con lo que has escrito exactamente, descartando otros caracteres no solicitados. Es muy útil.
http://www.cplusplus.com/reference/i.../istream/sync/
  #4 (permalink)  
Antiguo 02/11/2014, 22:46
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: Ingresar string con espacios

Cita:
Iniciado por UzumakiMarkoz Ver Mensaje
Buenas, me preguntaba si me podrían ayudar con
A la hora de ingresar la dirección no lee el comando getline() y pasa a la línea siguiente, lo cambie por el cin pero solo el cin >> no lee los espacios, intente tambien con cin.getline() pero no da resultado.

Algún consejo?
Lo mismo te pasa después de ingresar matrícula", se salta el menú de "Elegir una opción". Lo primero lo resuelves con un simple getchar aprovechando que usas cstdlib, pero lo segundo necesita una limpieza mayor del buffer cosa que consigues con el while:

Código C++:
Ver original
  1. cout << "********* Menu de Inicio ********* \n\n0: Salir" <<endl;
  2.         cout << "1: Matricular\n\nElige una opcion: ";
  3.        
  4.             {
  5.                 cout << "Nombre: ";
  6.                 cin >> Nom;
  7.                 cout << "\nApellido: ";
  8.                 cin >> Ape;
  9.                 cout << "\nCedula: ";
  10.                 cin >> Ced;
  11.                 cout << "\nTelefono: ";
  12.                 cin >> Tel;
  13.                 getchar ( ) ;
  14.                 cout << "\nDireccion: ";
  15.                 getline(cin, Dir);
  16.                 cout << endl << "Matricula Exitosa!" << endl << endl;
  17.                 while ( getchar ( ) != '\n' ) ;
  18.                
  19.             }

¡¡¡Saluditos!!!


Etiquetas: char, espacios, int, programa, string
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 12:29.