Autor
|
Tema: Problema con cin.getline (Leído 6,929 veces)
|
erest0r
Desconectado
Mensajes: 147
|
Hola de nuevo, mi nuevo problema es con la funcion que nombre en el titulo, y bueno el codigo es este: #include<iostream>
using namespace std;
int main() { char str1[5], str2[5]; cout << "Introduce una frase: "; cin.getline(str1, 5, '\n'); cout << "Tu frase es: " << str1; cout << endl << "Ingrese otra frase: "; cin.getline(str2, 5, '\n'); cout << endl << "Tu frase es: " << str2 << endl; cin.get(); }
Como podran ver, el programa funcionara mal si el usuario introduce una cadena mayor a 4, y queria saber si me podrian ayudar con una solucion a eso. Gracias
|
|
|
En línea
|
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
|
|
|
flony
Desconectado
Mensajes: 584
|
cambia el 5 cin.getline(str1, 5,'\n'); por el numero que creas conveniente idem in.getline(str2, 5, '\n'); lo mismo en el vector ===== una opcion es usar string que son por decirlo asi vectores dinamicos donde la longitud la pone el usuario no lo probe pero deberia ser mas o menos #include<iostrem> #35include<string>[
using manespace std, int main() { string frase; getline(cin, frase ); cout<<"la frase es " <<frase<<endl; return 0; }
|
|
« Última modificación: 23 Agosto 2013, 06:06 am por flony »
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
erest0r
Desconectado
Mensajes: 147
|
La primera solucion que propones no la veo muy satisfactoria, es facil agregar cin.getline(str1, 1000000000000,'\n');
pero se ve "anti-programador" tener eso asi xD. Me gustaria una especie de codigo que pueda manejar ese exceso de la cadena. Probare la segunda solucion.
|
|
|
En línea
|
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
|
|
|
flony
Desconectado
Mensajes: 584
|
la primer solucion es si queres un limite de palabras...ejemplo la contraseña es de 8 digitos la segunda es si queres que el usuario escriba hasta cansarse
|
|
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
erest0r
Desconectado
Mensajes: 147
|
Ok, pero la cuestion esta en que si el usuario no hace caso e introduce una cadena mayor al limite que le coloque, cómo haria para manejar esa situacion y no me de error.
|
|
|
En línea
|
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
|
|
|
flony
Desconectado
Mensajes: 584
|
una opción es usa la segunda solución, recorrerla con un while y dentro del while un for y mandarle un mensaje si se pasa, diciendo jodete el exceso de palabras no vale....o mejor para no ofenderlo decirle...che son 8 dígitos nada mas
|
|
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
erest0r
Desconectado
Mensajes: 147
|
Yo entiendo, aunque si tuvieses una forma de manejar la primera situacion me gustaria saber, como el gets(), que cuando le pasas por parametro el tamaño de la cadena y el usuario escribe de mas, la funcion solamente tomara hasta el maximo que le indicaste, aunque en este caso creo q hace lo mismo y cuando va al segundo cin.getline(), lo omite, y tampoco puedo hacer algo del tipo while(getchar() != '\n');
antes del segundo cin.getline(), por eso quisiera saber una forma de poder solucionarlo de la forma en que lo presente, y sino, bueno tendre que hacerlo de la forma en que dijiste.
|
|
|
En línea
|
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Como ya te comentaron lo mejor es utilizar instancias de la clase string, con ellas los pasos son: 1) Lees la linea completa mediante string::getline. 2) Verificas su tamaño (función miembro size) y si es mayor que el permitido descartas el exceso mediante la función string::erase. Por ejemplo: string primera; getline(cin, primera); if (primera.size() > max_chars) // max_chars == maximo numero de caracteres primera.erase(max_chars, string::npos);
Si por alguna razón debes utilizar arrays de caracteres para almacenar las lineas los pasos son: 1) Lees la linea mediante la función istream::get, su funcionamiento es idéntico a istream::getline pero con la diferencia que el carácter delimitador ('\n' a menos que se especifique otro) se queda en el bufer de la entrada estándar. 2) Descartas el resto de la linea (por lo menos el '\n') mediante la función istream::ignore. Por ejemplo: const int max_chars = 5; // 4 caracteres mas el '\0' // ... char primera[max_chars]; cin.get(primera, max_chars); cin.ignore(numeric_limits<int>::max(), '\n');
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
erest0r
Desconectado
Mensajes: 147
|
Muchas gracias, todas las soluciones fueron utiles, y la ultima del compañero rir3760 se acerca mas a lo que buscaba.
+1
|
|
|
En línea
|
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
PROBLEMA con la funcion miembro getline() e ignore()
Programación C/C++
|
.:BlackCoder:.
|
9
|
7,792
|
27 Julio 2010, 04:29 am
por leogtz
|
|
|
getline()
Programación C/C++
|
Geek7
|
3
|
11,820
|
29 Julio 2010, 20:52 pm
por Geek7
|
|
|
cin.getline problemas en C++
Programación C/C++
|
vikour92
|
0
|
1,952
|
23 Mayo 2012, 19:24 pm
por vikour92
|
|
|
cin.getline y cin.ignore
Programación C/C++
|
ricardo2013
|
6
|
4,845
|
25 Octubre 2012, 17:01 pm
por rir3760
|
|
|
Ayuda! Por favor. Tengo problema con memoria dinámica en c++ y función getline
Programación C/C++
|
DeathStar92
|
0
|
2,279
|
25 Noviembre 2012, 19:56 pm
por DeathStar92
|
|