Autor
|
Tema: Duda con una lectura de teclado en c++ (Leído 3,954 veces)
|
dato000
Desconectado
Mensajes: 3.034
|
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. #include <iostream> #include <fstream> #include <string> using namespace std; struct Nadador { char nombre[30]; int edad; char prueba[20]; double tiempo; }; typedef struct Nadador datosNadador; int main() { datosNadador nuevosDatos; datosNadador *p_nuevosDatos; p_nuevosDatos = &nuevosDatos; cout << "************** Problema 11.3 **************" << endl << endl; cout << "Digite el nombre del nadador: "; cin.getline(p_nuevosDatos->nombre, 30, '\n'); cout << "Nombre del nadador: " << p_nuevosDatos->nombre << endl << endl; cout << "Digite la edad del nadador: "; cin >> p_nuevosDatos->edad; cout << "Edad del nadador: " << p_nuevosDatos->edad << endl << endl; cout << "Digite la prueba que hizo el nadador: "; cin.getline(p_nuevosDatos->prueba, 20, '\n'); cout << "Nombre de la prueba: " << p_nuevosDatos->prueba << endl << endl;; cout << "Digite el tiempo de la prueba: "; cin >> p_nuevosDatos->tiempo; cout << "Tiempo realizado en la prueba: " << p_nuevosDatos->nombre << endl << endl;; return 0; }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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:#include <iostream> #include <fstream> #include <string> #include <cstdio> using namespace std; struct Nadador { char nombre[30]; int edad; char prueba[20]; double tiempo; }; typedef struct Nadador datosNadador; int main() { datosNadador nuevosDatos; datosNadador *p_nuevosDatos; p_nuevosDatos = &nuevosDatos; cout << "************** Problema 11.3 **************" << endl << endl; cout << "Digite el nombre del nadador: "; cin.getline(p_nuevosDatos->nombre, 30, '\n'); cout << "Nombre del nadador: " << p_nuevosDatos->nombre << endl << endl; cout << "Digite la edad del nadador: "; cin >> p_nuevosDatos->edad; while (getchar ()!='\n'); cout << "Edad del nadador: " << p_nuevosDatos->edad << endl << endl; cout << "Digite la prueba que hizo el nadador: "; cin.getline(p_nuevosDatos->prueba, 20, '\n'); cout << "Nombre de la prueba: " << p_nuevosDatos->prueba << endl << endl;; cout << "Digite el tiempo de la prueba: ";cin >> p_nuevosDatos->tiempo; cout << "Tiempo realizado en la prueba: " << p_nuevosDatos->tiempo << endl << endl;; return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
No no, el cin.ignore después de un cin (que preceda a un getline): #include <iostream> #include <fstream> #include <string> #include <cstdio> using namespace std; struct Nadador { char nombre[30]; int edad; char prueba[20]; double tiempo; }; typedef struct Nadador datosNadador; int main() { datosNadador nuevosDatos; datosNadador *p_nuevosDatos; p_nuevosDatos = &nuevosDatos; cout << "************** Problema 11.3 **************" << endl << endl; cout << "Digite el nombre del nadador: "; cin.getline(p_nuevosDatos->nombre, 30, '\n'); cout << "Nombre del nadador: " << p_nuevosDatos->nombre << endl << endl; cout << "Digite la edad del nadador: "; cin >> p_nuevosDatos->edad; cin.ignore(); cout << "Edad del nadador: " << p_nuevosDatos->edad << endl << endl; cout << "Digite la prueba que hizo el nadador: "; cin.getline(p_nuevosDatos->prueba, 20, '\n'); cout << "Nombre de la prueba: " << p_nuevosDatos->prueba << endl << endl;; cout << "Digite el tiempo de la prueba: ";cin >> p_nuevosDatos->tiempo; cout << "Tiempo realizado en la prueba: " << p_nuevosDatos->tiempo << endl << endl;; cin.ignore(); return 0; }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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
Mensajes: 3.034
|
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
Mensajes: 1.314
|
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! ..... !!!!
|
|
« Última modificación: 28 Diciembre 2013, 14:57 pm por leosansan »
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Cierto, actualice mi codeblocks, y funciona perfectamente. Muchas gracias
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Cierto, actualice mi codeblocks, y funciona perfectamente. Muchas gracias ¡¡¡Me encantan que los planes salgan bien !!! Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
|
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,971
|
4 Febrero 2014, 08:47 am
por camilo_
|
|
|
Lectura del teclado en una ventana
Java
|
rommel89
|
4
|
2,798
|
2 Agosto 2012, 23:07 pm
por leogtz
|
|
|
¿Como romper una lectura de teclado?
Java
|
exoesqueleto
|
3
|
2,441
|
6 Julio 2013, 05:49 am
por exoesqueleto
|
|
|
Python: Lectura errónea por teclado
Programación General
|
kurosakisan
|
2
|
2,485
|
24 Junio 2018, 20:33 pm
por kurosakisan
|
|
|
Lectura teclado
Programación C/C++
|
AXA
|
4
|
3,793
|
8 Enero 2022, 19:49 pm
por .xAk.
|
|