elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con estructuras  (Leído 3,121 veces)
clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Problema con estructuras
« en: 8 Septiembre 2010, 16:58 pm »

Bueno, para el segundo trabajo de la facultad, nos dieron como consigna tratar de simular un sistema de un cajero de supermercado, donde la compra maxima es de 12 articulos.

Ahora, el problema qe tengo es cuando sumo los totales, y cuando los muestro.

Yo sospecho que el problema viene por los scanf, lo que supongo es qe hay numeros largos qe sobrepasan el espacio reservado y se meten en el lugar de otro, generando cualquier resultado.

Dejo el code:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct Compra {
  5.       int codprod;
  6.       int cantidad;
  7.       float precio;
  8.       };
  9.  
  10. struct Factura {
  11.       int fecha[2];
  12.       int cuil[6];
  13.       struct Compra lista[12];
  14.       float total;
  15.       };
  16.  
  17. struct Factura leerdatos();
  18. float calctot ( struct Compra lista [], int n);
  19.  
  20. int main() {
  21.  int i;
  22.  struct Factura fachoy;
  23.  fachoy=leerdatos();
  24.  fachoy.total=calctot( fachoy.lista, 12);  
  25.  printf("Los productos que Ud. lleva son: \n");
  26.  for (i=0; i<12; i++){
  27.      printf("%d - %d - $%d\n\n",fachoy.lista[i].cantidad ,fachoy.lista[i].codprod ,fachoy.lista[i].precio);
  28.  }
  29.  printf("TOTAL ---------------- $%d\n", fachoy.total);
  30.  
  31.  system("PAUSE");
  32.  return 0;
  33. }
  34.  
  35. struct Factura leerdatos(){
  36.      struct Factura temp;
  37.      int x;
  38.      int i;
  39.      printf("Ingrese el dia, luego el mes y finalmente el año.\nEspaciandolos con ENTER. EN NUMEROS\n");
  40.      for (i=0; i<3; i++){
  41.          scanf("%d",&temp.fecha[i]);
  42.      }      
  43.      printf("Fecha ingresada: %d/%d/%d\n\n",temp.fecha[0],temp.fecha[1],temp.fecha[2]);
  44.      printf("Ingrese el numero de CUIL\n");
  45.      scanf("%s",&temp.cuil);
  46.      printf("CUIL Ingresado: %s\n\n",temp.cuil);
  47.      for (i=0; i<12; i++){
  48.          printf("Producto Numero %d\n",(i+1));
  49.          printf("Ingrese el Codigo del Producto.\n");
  50.          scanf("%d",&temp.lista[i].codprod);
  51.          printf("Ingrese la cantidad.\n");
  52.          scanf("%d",&temp.lista[i].cantidad);
  53.          printf("Ingrese el precio.\n");
  54.          scanf("%d",&temp.lista[i].precio);
  55.      }
  56. }
  57. float calctot (struct Compra lista [], int n){
  58.      float suma;
  59.      for (n=0; n<12; n++){
  60.          suma+=(lista[n].cantidad)*(lista[n].precio);
  61.      }
  62.      return suma;
  63. }

Lh: No hagas doble post, utiliza el botón modificar.

ya lo solcione, me faltaba el retorno de leer_datos  ;-) ;-) ;-) ;-) ;-)


« Última modificación: 8 Septiembre 2010, 22:55 pm por Littlehorse » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con estructuras
« Respuesta #1 en: 14 Septiembre 2010, 04:12 am »

¡Buenas!

Solo un detalle.

Es posible que los precios introducidos por ti sean enteros. Pero se espera que sean numeros flotantes y en tu codigo has escrito:
Código
  1.          printf("Ingrese el precio.\n");
  2.          scanf("%d",&temp.lista[i].precio);
Cuando deberia haber sido:
Código
  1.          printf("Ingrese el precio.\n");
  2.          scanf("%f",&temp.lista[i].precio);
ya que %d espera que el dato introducido sea entero, y %f flotante.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Problema con estructuras
« Respuesta #2 en: 14 Septiembre 2010, 16:23 pm »

sip jajaja son detalles qe ya corregi ;) jejej esta medio desactualizado el post jajaja tambien me faltan otros detalles minimos pero ya ta terminade =) Gracias!
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema con estructuras
« Respuesta #3 en: 14 Septiembre 2010, 18:41 pm »

Bueno yo remodele su code, a ver que tal. En vez de lo de su code el mio escribe todo en un fichero, pero no pregunta fecha ni nada. El mio directamente obtiene la hora del sistema xD!
Creo que usas muchas estructuras, variables, etc... a mi asi me parece mas sencillo.
Lo que le falta es escribir fecha y hora, que no me ha dado tiempo. Supongo que la version 1.2 sera mas completa xD....

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct Compra
  5. {
  6.    float codprod;
  7.    float cantidad;
  8.    float precio;
  9.    float total;
  10. };
  11.  
  12. struct Compra compra;
  13. FILE *fd;
  14. int i;
  15.  
  16. int main()
  17. {
  18.    printf ("#*************************************#\n");
  19.    printf ("#   -[ Comprar 1.1 - by Sagrini ]-    #\n");
  20.    printf ("#   ------------------------------    #\n");
  21.    printf ("#       Original code by Clodan       #\n");
  22.    printf ("#*************************************#\n");
  23.  
  24.    fd=fopen ("./register.dat", "a+");
  25.    compra.codprod=1;
  26.    while (compra.codprod!=0.0)
  27.    {
  28.        printf("\nIngrese el Codigo del Producto: ");
  29.        scanf("%f",&compra.codprod);
  30.        if (compra.codprod==0.0)
  31.            break;
  32.  
  33.        printf("Ingrese la cantidad: ");
  34.        scanf("%f",&compra.cantidad);
  35.  
  36.        printf("Ingrese el precio: ");
  37.        scanf("%f",&compra.precio);
  38.  
  39.        compra.total+=compra.precio;
  40.        fprintf (fd, "PRODUCT  %f  x%f\n", compra.cantidad, compra.codprod);
  41.    }
  42.    fprintf (fd, "TOTAL %f\n\n", compra.total);
  43.    printf("\nTOTAL $%f\n\n", compra.total);
  44.    fclose (fd);
  45.    return 0;
  46. }
  47.  





Aqui les traigo la version 1.2 de mi pequeño programa.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. struct Compra
  6. {
  7. float codprod;
  8. float cantidad;
  9. float precio;
  10. float total;
  11. };
  12.  
  13. struct Compra compra;
  14. struct tm *hora;
  15. time_t hour;
  16. FILE *fd;
  17. int i;
  18.  
  19. int main()
  20. {
  21. printf ("#*************************************#\n");
  22. printf ("#   -[ Comprar 1.2 - by Sagrini ]-    #\n");
  23. printf ("#   ------------------------------    #\n");
  24. printf ("#       Original code by Clodan       #\n");
  25. printf ("#*************************************#\n");
  26.  
  27. for (;;)
  28. {
  29. fd=fopen ("./register.dat", "a+");
  30. time (&hour);
  31. fprintf (fd, "%s",ctime (&hour));
  32. compra.codprod=1;
  33. while (compra.codprod!=0.0)
  34. {
  35. printf("\nIngrese el Codigo del Producto: ");
  36. scanf("%f",&compra.codprod);
  37. if (compra.codprod==0.0)
  38. break;
  39.  
  40. printf("Ingrese la cantidad: ");
  41. scanf("%f",&compra.cantidad);
  42.  
  43. printf("Ingrese el precio: ");
  44. scanf("%f",&compra.precio);
  45.  
  46. compra.total+=compra.precio;
  47. fprintf (fd, " PRODUCT  %f  x%f\n", compra.cantidad, compra.codprod);
  48. }
  49. fprintf (fd, " --------\n");
  50. fprintf (fd, " TOTAL %f\n\n\n", compra.total);
  51. printf("\nTOTAL $%f\n\n\n", compra.total);
  52. fclose (fd);
  53. getchar ();
  54. }
  55. return 0;
  56. }
  57.  

Bueno, si nadie se ha dado cuenta, comento que hay un error de omision. Lo descubri al probarlo en BETA con mi prima xD k le dio a un boton que no era una tecla y se volvia loco... Pruebenlo ustedes mismos, pero les aconsejo cortar rapido pork escribe en disco... Simplemente autorrellena los formularios con un 0, y lo escribe en un archivo... infinitas veces.

Si alguien tiene posibles soluciones, que las postee. Pense en comprobar que la cadena es solo numbers, pero no puedo ahora. A ver k tal...





Quinta modif. a mi post:
Me acabo de dar cuenta de que el modo de impresion es incorrecto...
 Remodelando.... Escribo aqui el code nuevo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. struct Compra
  6. {
  7. int codprod;
  8. int cantidad;
  9. float precio;
  10. float total;
  11. };
  12.  
  13. struct Compra compra;
  14. struct tm *hora;
  15. time_t hour;
  16. FILE *fd;
  17. int i;
  18.  
  19. int main()
  20. {
  21. printf ("#**************************************#\n");
  22. printf ("#   -[ Comprar 1.3.2 - by Sagrini ]-   #\n");
  23. printf ("#   -------------------------------    #\n");
  24. printf ("#        Original code by Clodan       #\n");
  25. printf ("#**************************************#\n");
  26.  
  27. for (;;)
  28. {
  29. fd=fopen ("./register.dat", "a+");
  30. time (&hour);
  31. fprintf (fd, "%s",ctime (&hour));
  32. compra.codprod=1;
  33. while (compra.codprod!=0.0)
  34. {
  35. printf("\nIngrese el Codigo del Producto: ");
  36. scanf("%d",&compra.codprod);
  37. if (compra.codprod==0.0)
  38. break;
  39.  
  40. printf("Ingrese la cantidad: ");
  41. scanf("%d",&compra.cantidad);
  42.  
  43. printf("Ingrese el precio: ");
  44. scanf("%f",&compra.precio);
  45.  
  46. compra.precio*=compra.cantidad;
  47. compra.total+=compra.precio;
  48. fprintf (fd, " PRODUCT  %d  x%d==%f\n", compra.codprod, compra.cantidad, compra.precio);
  49. }
  50. fprintf (fd, " --------\n");
  51. fprintf (fd, " TOTAL %f\n\n\n", compra.total);
  52. printf("\nTOTAL $%f\n\n\n", compra.total);
  53. fclose (fd);
  54. getchar ();
  55. }
  56. return 0;
  57. }
  58.  
« Última modificación: 15 Septiembre 2010, 17:37 pm por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con accceso a estructuras.
Programación C/C++
chemaspain 6 3,459 Último mensaje 7 Mayo 2011, 18:57 pm
por chemaspain
Problema copiando Estructuras a Bytes xP
Programación Visual Basic
x64core 4 1,896 Último mensaje 10 Noviembre 2011, 19:12 pm
por x64core
C++ Problema propuesto usando estructuras repetitivas
Programación C/C++
Franz1628 3 3,151 Último mensaje 27 Enero 2012, 23:45 pm
por theluigy13etv
Problema con estructuras y apuntadores
Programación C/C++
angelihsahn 2 2,277 Último mensaje 31 Agosto 2013, 12:27 pm
por lanun
Problema Con Un Arreglo Dinamico De Estructuras [?]
Programación C/C++
Omar_2013 2 2,730 Último mensaje 2 Septiembre 2013, 19:21 pm
por Omar_2013
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines