C/Visual C - Problema con cin.clear();cin.ignore(255,"");

 
Vista:

Problema con cin.clear();cin.ignore(255,"");

Publicado por Daniel (11 intervenciones) el 27/04/2008 00:19:06
Hola a todos
Después de mucho preguntar pude hacer que al ingresar
un número mayor de caracteres en la respectiva variable
el programa no se termine bruscamente.-
Ahora el caso es que de esta manera al escribir por ej.
el nombre hay que apretar 2 veces <Enter>
Lo que desearía es que me pudieran explicar el porqué y
si hay alguna manera de que esto no ocurra.-

------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
 
{
    char primer[16],segundo[16],apellido[16];
 
    cout << "Ingrese primer nombre(maximo 15 caracteres).:";
    cin.getline(primer,16);
    cin.clear();
    cin.ignore(255,'
');
 
    cout << "Ingrese segundo nombre(maximo 15 caracteres):";
    cin.getline(segundo,16);
    cin.clear();
    cin.ignore(255,'
');
 
    cout << "Ingrse apellido(maximo 15 caracteres).......:";
    cin.getline(apellido,16);
    cin.clear();
    cin.ignore(255,'
');
 
    strcat(primer," ");
    strcat(segundo," ");
    strcat(primer,segundo);
    strcat(primer,apellido);
    cout << "Nombre completo....: " << primer << endl << endl;
 
    system("pause");
 
    return EXIT_SUCCESS;
}
------------------------------------------------------------------
Desde ya muchas gracias y un gran abrazo para todos
Daniel(Argentina)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con cin.clear();cin.ignore(255,' ');

Publicado por Mariano (8 intervenciones) el 27/04/2008 21:07:37
Hola Daniel!

Mira, realmente no se porque te surge ese problema, xq al programar en consola yo uso la libreria stdio.h {propia de c y no de c++}.

Pero hay una funcion que es muy util, y que podria solucionar tu problema muy facilmente.

La funcion fgets(cadena,n,stdin), esta guarda lo ingresado por teclado en la variable cadena, HASTA n caracteres, es decir si vos pones fgets(primer,15,stdin), por mas que el usuario ingreso 35 caracteres, esta funcion solo va a guardar los primeros 15, evitando que asi se te pueda colgar el programa.

Lo ultimo, mas una recomendacion, es que no es neceserio ni util hacer tantos strcat para dps emitir, si vos qres dejar guardado todo en una sola variable, existe una funcion que se encarga de hacer eso en stdio.h que se llama sprintf

sprintf(cadena,"%s %s %s",primer,segundo,apellido);
de esta manera se guarda en la variable cadena, el primer nombre mas un espacio, mas el segundo nombre mas un espacio mas el apellido!

Saludos y espero que te haya sido util!

Un abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con cin.clear();cin.ignore(255," ");

Publicado por Daniel (11 intervenciones) el 28/04/2008 02:42:54
Hola Mariano
Me tarde un poco en contestarte porqué estuba haciendo
algunas prácticas y llegue al mismo problema qué antes
de usar cin.clear()...
------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
 
{
    char primero[11],segundo[11],apellido[11];
 
    cout << "Ingrese primer nombre.:";
    fgets(primero,11,stdin);
 
    cout << "Ingrese segundo nombre:";
    fgets(segundo,11,stdin);
 
    cout << "Ingrese apellido......:";
    fgets(apellido,11,stdin);
 
    cout << "Tu nombre completo es:" << primero << segundo << endl;
 
    system("pause");
 
    return EXIT_SUCCESS;
}
------------------------------------------
Si al ingresar por ej. en "Ingrese primer nombre.:" 10 caracteres
está todo bien, pero si ingreso más de 10 caracteres, directamente
el programa se termina.-

Bueno no queda más que seguir investigando
un gran abrazo y hasta la proxima
Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar