• Sábado 9 de Noviembre de 2024, 02:25

Autor Tema:  duda principiante!!!  (Leído 1865 veces)

cobain21

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
duda principiante!!!
« en: Martes 8 de Diciembre de 2009, 13:48 »
0
Bueno dias, me gustaría tener una solución para lo que abajo les describo...siempre me da problemas. Desde ya muchas gracias....Diego.

void IngresoMaquillaje (Maquillaje &maqui)//carga un maquillaje en ingresos
{
printf ("Ingrese la fecha:");
scan (maqui.fecha);
getchar();
printf ("nIngrese un comentario:");
scan (maqui.comentario);
getchar();
printf ("nIngrese el nombre del cliente:");
scan (maqui.cliente);
getchar();
printf ("nIngrese el precio:");
scanf ("%d", &maqui.precio);
getchar();
getchar();
system ("pause");
}


El problema es que en la ultima linea el "intro" me lo lee como un String y no me sale ingrese un precio sino que en precio me guarda la tecla "intro", se que tiene que ser facil de arreglar pero no me he podido dar cuenta...
Agradesco su colaboración....

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #1 en: Martes 8 de Diciembre de 2009, 18:44 »
0
Usa fgets (con stdin) para obtener las cadenas, en el caso del numero despues aplicale un sscanf a esa cadena para obtenerlo.

Ejemplo:
Código: C++
  1. printf ("nIngrese un comentario:");
  2. fgets(maqui.comentario, sizeof(maqui.comentario), stdin);
  3. printf ("nIngrese el precio:");
  4. char line[80];
  5. fgets(line, sizeof(line), stdin);
  6. sscanf (line, "%d", &maqui.precio);
  7.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

cobain21

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #2 en: Martes 8 de Diciembre de 2009, 19:20 »
0
Eternal Idol: lo hice a tu manera y me compilo bien pero al momento de ejecutar el programa me tiraba error.
Lo hice de esta manera y me funcionó:

Código: C++
  1. void IngresoMaquillaje (Maquillaje &maqui)//carga un maquillaje en ingresos
  2. {
  3.     printf ("Ingrese la fecha:");
  4.     scan (maqui.fecha);
  5.     getchar();
  6.     fflush (stdin);
  7.     printf ("nIngrese un comentario:");
  8.     fflush (stdin);
  9.     scan (maqui.comentario);
  10.     printf ("nIngrese el nombre del cliente:");
  11.     fflush (stdin);
  12.     scan (maqui.cliente);
  13.     printf ("nIngrese el precio:");
  14.     fflush (stdin);
  15.     scanf ("%d", &maqui.precio);
  16.  
  17.  

Cualquier aclaracion o sugerencia viene bien!!!!
Muchas gracias por tu ayuda.

Saludos

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #3 en: Martes 8 de Diciembre de 2009, 20:18 »
0
fflush no esta definido para flujos de entrada (como stdin) asi que no deberias usarlo. ¿Donde te daba error exactamente?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

cobain21

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #4 en: Martes 8 de Diciembre de 2009, 22:43 »
0
Haber se me podes corregir...ahi me compila bien pero se me montan las salidas :Ingresar cliente, etc y despues me dice que el programa debe cerrarse porque se produjo un error. Te escribo el codigo.
Código: C++
  1. void IngresoMaquillaje (Maquillaje &maqui)//carga un maquillaje en ingresos
  2. {
  3.     printf ("Ingrese la fecha:");
  4.     fgets (maqui.fecha, sizeof (maqui.fecha), stdin);
  5.     getchar();
  6.     printf ("nIngrese un comentario:");
  7.     fgets(maqui.comentario, sizeof(maqui.comentario), stdin);
  8.     printf ("nIngrese un cliente:");
  9.     fgets(maqui.cliente, sizeof(maqui.cliente), stdin);
  10.     printf ("nIngrese el precio:");
  11.     char line[80];
  12.     fgets(line, sizeof(line), stdin);
  13.     sscanf (line, "%d", &maqui.precio);
  14. }
  15.  

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #5 en: Martes 8 de Diciembre de 2009, 23:37 »
0
¿Que compilador usas? Esto me funciona:

Código: C++
  1. #include <stdio.h>
  2.  
  3. typedef struct _Maquillaje
  4. {
  5.     char fecha[16];
  6.     char comentario[16];
  7.     char cliente[16];
  8.     int precio;
  9. }Maquillaje;
  10.  
  11. void IngresoMaquillaje (Maquillaje &maqui)//carga un maquillaje en ingresos
  12. {
  13.     printf ("Ingrese la fecha:");
  14.     fgets (maqui.fecha, sizeof (maqui.fecha), stdin);
  15.     printf ("nIngrese un comentario:");
  16.     fgets(maqui.comentario, sizeof(maqui.comentario), stdin);
  17.     printf ("nIngrese un cliente:");
  18.     fgets(maqui.cliente, sizeof(maqui.cliente), stdin);
  19.     printf ("nIngrese el precio:");
  20.     char line[80];
  21.     fgets(line, sizeof(line), stdin);
  22.     sscanf (line, "%d", &maqui.precio);
  23. }
  24.  
  25. void main()
  26. {
  27.     Maquillaje m;
  28.     IngresoMaquillaje(m);
  29.     printf("rn");
  30.     printf("fecha %s comentario %s cliente %s precio %drn", m.fecha, m.comentario, m.cliente, m.precio);
  31. }
  32.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

player_

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #6 en: Martes 8 de Diciembre de 2009, 23:49 »
0
Y por qué el getchar() del primer código no lo sustituyes por un while(getchar() != 'n');?

cobain21

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: duda principiante!!!
« Respuesta #7 en: Miércoles 9 de Diciembre de 2009, 01:00 »
0
Uso el code blocks.
Citar
Y por qué el getchar() del primer código no lo sustituyes por un while(getchar() != 'n');?

probe de esta forma, me compila bien pero se me cuelga tambien cuando ingreso la segunda linea.

yo lo tengo asi en modulos diferentes:

Código: C++
  1. typedef struct {
  2.     String fecha;
  3.     String comentario;
  4.     String cliente;
  5.     int precio;
  6. }Maquillaje;
  7.  

el "String" lo tengo hecho en otro modulo y es para que me lea he imprima las cadenas de texto, no creo que haga falta poner el codigo del String para que lo vean. El scan guarda y el print imprime.

Código: C++
  1. void IngresoMaquillaje (Maquillaje &maqui)//carga un maquillaje en ingresos
  2. {
  3.     printf ("Ingrese la fecha:");
  4.     fgets (maqui.fecha, sizeof (maqui.fecha), stdin);
  5.     while(getchar() != 'n');
  6.     printf ("nIngrese un comentario:");
  7.     fgets(maqui.comentario, sizeof(maqui.comentario), stdin);
  8.     printf ("nIngrese un cliente:");
  9.     fgets(maqui.cliente, sizeof(maqui.cliente), stdin);
  10.     printf ("nIngrese el precio:");
  11.     char line[80];
  12.     fgets(line, sizeof(line), stdin);
  13.     sscanf (line, "%d", &maqui.precio);
  14. }
  15.  

Asi fue de la unica manera que me funciono: pero he leido que no es recomendado su uso:

Código: C++
  1. void IngresoDepilacion (Depilacion &depi)//carga un maquillaje en ingresos
  2. {
  3.     printf ("Ingrese la fecha:");
  4.     scan (maqui.fecha);
  5.     getchar();
  6.     fflush (stdin);//sirve para limpiar el buffer del teclado y que no me quede el "enter" guardado
  7.     printf ("nIngrese un comentario:");
  8.     fflush (stdin);
  9.     scan (maqui.comentario);
  10.     printf ("nIngrese el nombre del cliente:");
  11.     fflush (stdin);
  12.     scan (maqui.cliente);
  13.     printf ("nIngrese el precio:");
  14.     fflush (stdin);
  15.     scanf ("%d", &maqui.precio);
  16. }
  17.  
  18.