Autor
|
Tema: Problemas limitando caracteres en el ingreso (Leído 2,786 veces)
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Bueno aqui estuve intentando ingresar cadenas mayores a 20 y que solo guarde los primeros 20 como maximo pero no he podido hacerlo, me salta de linea por problemas en el buffer y no tengo idea de como resolverlo aqui el codigo #include <iostream> #include <stdio.h> //Librerias #include <stdlib.h> //del C :v using namespace std; const int MAX=20; typedef char tcad[20]; typedef struct{ tcad nombre; tcad apellido; int edad; int DNI; }templeado; void cargar(templeado &empleado); void mostrar(templeado empleado); int main() { templeado EMPLEADO; cargar(EMPLEADO); mostrar(EMPLEADO); system("pause"); return 0; } void cargar(templeado &empleado) { cout << "Ingrese nombre : "; cin.getline(empleado.nombre,MAX+1); cout << "Ingrese apellido: "; cin.getline(empleado.apellido,MAX+1); cout << "Ingrese edad : "; cin >> empleado.edad; fflush(stdin); cout << "Ingrese DNI : "; cin >> empleado.DNI; } void mostrar(templeado empleado) { cout << "DATOS EMPLEADO" << endl; cout << "Nombre : " << empleado.nombre << endl; cout << "Apellido: " << empleado.apellido << endl; cout << "Edad : " << empleado.edad << endl; cout << "DNI : " << empleado.DNI << endl; }
Datos de entrada: Nelson growwwwwwwwwwwwwwwwwwwwww Datos de salida: Tremendo desbordamiento Podria hacerlo con funciones propias pero el profesor no lo quiere asi, alguna sugerencia, desde ya gracias
|
|
|
En línea
|
7w7
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
2 cosas importantes: - Cuando ese getline deja de leer porque se ha llenado el buffer, activa el "failbit", el cual puedes ver si está activado con "cin.fail()", que retorna un bool. Con esto puedes ver si se ha leído el salto de línea o no.
- Para volver a usar cin despues de que una flag de error haya sido establecida, puedes usar "cin.clear()"
Dicho esto, una posible opción sería, tras la lectura, comprobar si está el failbit activado. Y luego, leer con getline en bucle hasta que el failbit no se establezca, lo que significaría que ya se leyó el salto de línea. Esta lógica la puedes meter en una función para evitar escribirla siempre. Otro detalle: En C++, en vez de las cabeceras de C,e s preferible usar las cabeceras de C++ que vienen de C, que son las mismas con una "c" al principio y sin el ".h": "stdio.h" => "cstdio"...
|
|
|
En línea
|
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
No sirve el cin.clear(); Pero encontre otra alternativa lo dejo aqui, por ahi a alguien le sirve #include <iostream> #include <cstring> #include <stdio.h> //Libreria para utilizar la funcion gets, fgets, fflush; using namespace std; int main(){ char primera[10], segunda[10]; cout << "Primera: "; fgets(primera, 11, stdin); fflush(stdin); cout << "Segunda: "; fgets(segunda, 11, stdin); fflush(stdin); cout << primera << endl; cout << segunda << endl; system("pause"); }
Ahora si puedo poner tranquilamente: Nelson Growwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
|
|
|
En línea
|
7w7
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Pues esto te funcionará en pocos sitios: como hemos dicho muchas veces el fflush, dice el estándar, solo está asegurado para flujos de salida. Para los flujos de entrada, como stdin, es a libre albedrío del creador del compilador que funcione.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
No sirve el cin.clear(); Pero encontre otra alternativa lo dejo aqui, por ahi a alguien le sirve #include <iostream> #include <cstring> #include <stdio.h> //Libreria para utilizar la funcion gets, fgets, fflush; using namespace std; int main(){ char primera[10], segunda[10]; cout << "Primera: "; fgets(primera, 11, stdin); fflush(stdin); cout << "Segunda: "; fgets(segunda, 11, stdin); fflush(stdin); cout << primera << endl; cout << segunda << endl; system("pause"); }
Ahora si puedo poner tranquilamente: Nelson Growwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww El cin.clear(), como dije, limpia flags de error, no resuelve tu problema.
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Prueba con cin.ignore() o cin >> ws o while(getchar!='\n')
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Telefónica esta limitando rapidshare y megaupload?
« 1 2 ... 5 6 »
Foro Libre
|
T0rete
|
51
|
30,817
|
31 Enero 2011, 01:15 am
por chillinfart
|
|
|
limitando cantidad de digitos en jtextfield Netbeans
Java
|
jelsir
|
3
|
3,229
|
30 Julio 2016, 22:41 pm
por Once
|
|
|
Firefox matará Flash un poco más limitando (aún) más su uso
Noticias
|
wolfbcn
|
0
|
1,118
|
17 Mayo 2017, 20:57 pm
por wolfbcn
|
|
|
Problemas con for y concatenar caracteres.
Java
|
#Aitor
|
2
|
3,627
|
29 Junio 2017, 14:43 pm
por #Aitor
|
|
|
Problemas de ingreso
PHP
|
jacarvy
|
5
|
4,110
|
22 Mayo 2021, 01:26 am
por jacarvy
|
|