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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con una lectura de teclado en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con una lectura de teclado en c++  (Leído 3,946 veces)
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Duda con una lectura de teclado en c++
« en: 27 Diciembre 2013, 23:45 pm »

Buenas gente, feliz navidad espero que la esten pasando bien

Miren, mirando a ratos problemas, pues me encontre con algo muy curioso con la lectura de datos en C++.

No entiendo porque ocurre lo siguiente:



Básicamente no se como hacer para leer correctamente los datos de y limpiar el buffer entrada, como siempre recomiendan NO USAR fflush(stdin), debe ser un problema con cin.getline, pero en definitiva no se que usar para leer cadenas que tengan el espacio, para leer nombres completos.

Les agradeceria su ayuda con esta duda.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. struct Nadador
  8. {
  9.    char nombre[30];
  10.    int edad;
  11.    char prueba[20];
  12.    double tiempo;
  13. };
  14.  
  15. typedef struct Nadador datosNadador;
  16.  
  17. int main()
  18. {
  19.    datosNadador nuevosDatos;
  20.    datosNadador *p_nuevosDatos;
  21.  
  22.    p_nuevosDatos = &nuevosDatos;
  23.  
  24.    cout << "************** Problema 11.3 **************" << endl << endl;
  25.  
  26.    cout << "Digite el nombre del nadador:  "; cin.getline(p_nuevosDatos->nombre, 30, '\n');
  27.    cout << "Nombre del nadador:  " << p_nuevosDatos->nombre << endl << endl;
  28.  
  29.    cout << "Digite la edad del nadador:  "; cin >> p_nuevosDatos->edad;
  30.    cout << "Edad del nadador:  " << p_nuevosDatos->edad << endl << endl;
  31.  
  32.    cout << "Digite la prueba que hizo el nadador:  "; cin.getline(p_nuevosDatos->prueba, 20, '\n');
  33.    cout << "Nombre de la prueba:  " << p_nuevosDatos->prueba << endl << endl;;
  34.  
  35.    cout << "Digite el tiempo de la prueba:  "; cin >> p_nuevosDatos->tiempo;
  36.    cout << "Tiempo realizado en la prueba:  " << p_nuevosDatos->nombre << endl << endl;;
  37.  
  38.    return 0;
  39. }
  40.  



En línea


amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #1 en: 28 Diciembre 2013, 00:08 am »

Después del cin, tienes que poner un cin.ignore() si después vas a usar un getline().

La razón es porque el cin se deja el salto de linea cin coger, asi que te lo tienes que saltar con el .ignore().


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #2 en: 28 Diciembre 2013, 00:15 am »

 :-( :-( no me funciono, el cin.ignore() solo parece que se usa para un doble salto de linea.  :silbar: :silbar:



sigo sin entender porque no guardar o imprime correctamente los datos que necesito, en C con fgets, fscanf y fprint lo puedo hacer sin problemas, pero quisiera saber porque no funciona igual con cin y cout, raro, pensaba que no tendria estos problemas.

En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #3 en: 28 Diciembre 2013, 00:31 am »


Básicamente no se como hacer para leer correctamente los datos de y limpiar el buffer entrada, como siempre recomiendan NO USAR fflush(stdin), debe ser un problema con cin.getline, pero en definitiva no se que usar para leer cadenas que tengan el espacio, para leer nombres completos.

Les agradeceria su ayuda con esta duda.
.......................................

La verdad que la limpieza del buffer empieza a ser un martirio. He aquí una salida:


Añadir un simple while:

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdio>
  5.  
  6. using namespace std;
  7.  
  8. struct Nadador
  9. {
  10.    char nombre[30];
  11.    int edad;
  12.    char prueba[20];
  13.    double tiempo;
  14. };
  15.  
  16. typedef struct Nadador datosNadador;
  17.  
  18. int main()
  19. {
  20.  
  21.    datosNadador nuevosDatos;
  22.    datosNadador *p_nuevosDatos;
  23.  
  24.    p_nuevosDatos = &nuevosDatos;
  25.  
  26.    cout << "************** Problema 11.3 **************" << endl << endl;
  27.  
  28.    cout << "Digite el nombre del nadador:  "; cin.getline(p_nuevosDatos->nombre, 30, '\n');
  29.    cout << "Nombre del nadador:  " << p_nuevosDatos->nombre << endl << endl;
  30.  
  31.    cout << "Digite la edad del nadador:  "; cin >> p_nuevosDatos->edad;
  32.    while (getchar ()!='\n');
  33.    cout << "Edad del nadador:  " << p_nuevosDatos->edad << endl << endl;
  34.  
  35.    cout << "Digite la prueba que hizo el nadador:  "; cin.getline(p_nuevosDatos->prueba, 20, '\n');
  36.    cout << "Nombre de la prueba:  " << p_nuevosDatos->prueba << endl << endl;;
  37.  
  38.    cout << "Digite el tiempo de la prueba:  ";cin >> p_nuevosDatos->tiempo;
  39.    cout << "Tiempo realizado en la prueba:  " << p_nuevosDatos->tiempo << endl << endl;;
  40.  
  41.    return 0;
  42. }
  43.  

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!



 
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #4 en: 28 Diciembre 2013, 00:50 am »

:-( :-( no me funciono, el cin.ignore() solo parece que se usa para un doble salto de linea.  :silbar: :silbar:
No no, el cin.ignore después de un cin (que preceda a un getline):

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdio>
  5.  
  6. using namespace std;
  7.  
  8. struct Nadador
  9. {
  10.   char nombre[30];
  11.   int edad;
  12.   char prueba[20];
  13.   double tiempo;
  14. };
  15.  
  16. typedef struct Nadador datosNadador;
  17.  
  18. int main()
  19. {
  20.  
  21.   datosNadador nuevosDatos;
  22.   datosNadador *p_nuevosDatos;
  23.  
  24.   p_nuevosDatos = &nuevosDatos;
  25.  
  26.   cout << "************** Problema 11.3 **************" << endl << endl;
  27.  
  28.   cout << "Digite el nombre del nadador:  "; cin.getline(p_nuevosDatos->nombre, 30, '\n');
  29.   cout << "Nombre del nadador:  " << p_nuevosDatos->nombre << endl << endl;
  30.  
  31.   cout << "Digite la edad del nadador:  "; cin >> p_nuevosDatos->edad;
  32.  
  33.   cin.ignore();
  34.  
  35.   cout << "Edad del nadador:  " << p_nuevosDatos->edad << endl << endl;
  36.  
  37.   cout << "Digite la prueba que hizo el nadador:  "; cin.getline(p_nuevosDatos->prueba, 20, '\n');
  38.   cout << "Nombre de la prueba:  " << p_nuevosDatos->prueba << endl << endl;;
  39.  
  40.   cout << "Digite el tiempo de la prueba:  ";cin >> p_nuevosDatos->tiempo;
  41.   cout << "Tiempo realizado en la prueba:  " << p_nuevosDatos->tiempo << endl << endl;;
  42.   cin.ignore();
  43.  
  44.   return 0;
  45. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #5 en: 28 Diciembre 2013, 01:08 am »

No no, el cin.ignore después de un cin (que preceda a un getline):
.......................

Perfecto, hace el mismo uso que el while pero más de C++.

En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #6 en: 28 Diciembre 2013, 01:26 am »

Que raro, no me funciono con la de leo, incluso inclui dos while para estar seguro, me salio esto...




Más extraño aún con la de amchacon sucede lo mismo...



Extraño, pero creo que ya voy entendiendo, no dejo código porque estuve usando datos estaticos que grabe desde una estructura, es decir, me invente mis propios datos sin tomar entrada de teclado, así que quedaría mucho código sin relación al problema original, esto es más una curiosidad sobre cin y cout.

slds gracias por su ayuda gente.

Que podría estar pasando?? el compilador es gcc y uso codeblocks, no creo que sea un problema de eso no??
« Última modificación: 28 Diciembre 2013, 01:32 am por dato000 » En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #7 en: 28 Diciembre 2013, 10:01 am »

Que raro, no me funciono con la de leo, incluso inclui dos while para estar seguro, .......................................................

Que podría estar pasando?? el compilador es gcc y uso codeblocks, no creo que sea un problema de eso no??

Como vistes por el pantallazo, a mí si me funciono, tanto el mío como el de amchacon. Tal vez deberías actualizar la versión del Code::Blocks.

¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:



« Última modificación: 28 Diciembre 2013, 14:57 pm por leosansan » En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #8 en: 28 Diciembre 2013, 15:31 pm »

Cierto, actualice mi codeblocks, y funciona perfectamente.


Muchas gracias

En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una lectura de teclado en c++
« Respuesta #9 en: 28 Diciembre 2013, 15:42 pm »

Cierto, actualice mi codeblocks, y funciona perfectamente.


Muchas gracias




¡¡¡Me encantan que los planes salgan bien !!!

Saluditos! ..... !!!!       
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,953 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
Lectura del teclado en una ventana
Java
rommel89 4 2,789 Último mensaje 2 Agosto 2012, 23:07 pm
por leogtz
¿Como romper una lectura de teclado?
Java
exoesqueleto 3 2,437 Último mensaje 6 Julio 2013, 05:49 am
por exoesqueleto
Python: Lectura errónea por teclado
Programación General
kurosakisan 2 2,481 Último mensaje 24 Junio 2018, 20:33 pm
por kurosakisan
Lectura teclado
Programación C/C++
AXA 4 3,780 Último mensaje 8 Enero 2022, 19:49 pm
por .xAk.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines