Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: S4ms3pi0l__ en 16 Noviembre 2017, 18:45 pm



Título: Problema al leer caracteres [C]
Publicado por: S4ms3pi0l__ en 16 Noviembre 2017, 18:45 pm
El problema que tengo es, que sólo imprime el nombre del primer producto con el código registrado, a la hora de buscar los demás códigos, me envía el mensaje que "No existe" cuando no es así. Aquí les dejo el código:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5. void menu();
  6. void menu(){
  7. printf("\t*****CONTROL DE INVENTARIO*****\n");
  8. printf("1.-Listado del inventario actual\n2.-Busqueda de productos\n3.-Ingresos totales\n4.-SALIR\n");
  9. printf("--------------------------------\n");
  10. }
  11. void salida();
  12. void salida(){
  13. printf("Saliendo del programa... Hasta pronto!\n");
  14. }
  15. struct Inventario{
  16. char codigo[10];
  17. char nombre[25];
  18. int cantidad;
  19. float pventa;
  20. };
  21. int Registrar(Inventario x[], int i);
  22. int Registrar(Inventario x[], int i){
  23. for(i=0;i<=2;i++){
  24. printf("\tRegistrar productos\n");
  25. printf("Producto #%d \n",i);
  26. printf("Ingrese el codigo del producto: ");
  27. gets(x[i].codigo);
  28. fflush(stdin);
  29. printf("\nIngrese el nombre del producto: ");
  30. gets(x[i].nombre);
  31. fflush(stdin);
  32. do{
  33. printf("\nIngrese la cantidad: ");
  34. scanf("%d",&x[i].cantidad);
  35. }while(x[i].cantidad<=0);
  36. fflush(stdin);
  37. do{
  38. printf("\nIngrese el precio de venta: ");
  39. scanf("%f",&x[i].pventa);
  40. }while(x[i].pventa<=0);
  41. fflush(stdin);
  42. system("cls");
  43. }
  44. }
  45. void Lista(int i, Inventario x[]);
  46. void Lista(int i, Inventario x[]){
  47. for(int j=0;j<=2;j++){
  48. printf("%s \t %s \t %d \t %0.2f \n",x[j].codigo, x[j].nombre, x[j].cantidad, x[j].pventa);
  49. }
  50. }
  51. /*Aqui esta el problema*/
  52. void Busqueda(char cod[10], Inventario x[], int i);
  53. void Busqueda(char cod[10], Inventario x[], int i){
  54. printf("Ingrese el codigo que desea buscar: ");
  55. scanf("%s",&cod);
  56. fflush(stdin);
  57. for(int j=0;j<=2;j++){
  58. if(strcmp(x[j].codigo,cod)==0){
  59. printf("\nProducto: %s \n",x[j].nombre);
  60.                        break;
  61. }else{
  62. printf("\nNo Existe\n");
  63.                        break;
  64. }
  65. }
  66. }
  67. /*                                        */
  68. float Venta(Inventario x[], int i);
  69. float Venta(Inventario x[], int i){
  70. float total;
  71. for(int j=0;j<=2;j++){
  72. total+=x[j].cantidad*x[j].pventa;
  73. }
  74. printf("Ingreso total: %0.2f \n",total);
  75. }
  76. int main(){
  77. struct Inventario prod[20];
  78. int i=0, op;
  79. char cod[10];
  80. bool salir = true;
  81. Registrar(prod,i);
  82. do{
  83. system("cls");
  84. menu();
  85. do{
  86. printf("\nSeleccione una opcion: ");
  87. scanf("%d",&op);
  88. }while(op<=0 || op>=5);
  89. system("cls");
  90. switch(op){
  91. case 1:{
  92. printf("\tINVENTARIO ACTUAL\n");
  93. Lista(i,prod);
  94. system("PAUSE");
  95. system("cls");
  96. break;
  97. }
  98. case 2:{
  99. printf("\tBUSQUEDA\n");
  100. Busqueda(cod, prod, i);
  101. system("PAUSE");
  102. system("cls");
  103. break;
  104. }
  105. case 3:{
  106. printf("\tVENTA TOTAL DEL INVENTARIO\n");
  107. Venta(prod, i);
  108. system("PAUSE");
  109. system("cls");
  110. break;
  111. }
  112. case 4:{
  113. salida();
  114. salir = false;
  115. break;
  116. }
  117. }
  118. }while(salir==true);
  119. return 0;
  120. }
  121.  


Título: Re: Problema al leer caracteres [C]
Publicado por: MAFUS en 16 Noviembre 2017, 22:13 pm
No hace falta que declares una función si la defines acto seguido. Es rellenar código sin importar. Es decir:
Código
  1. void f1();
  2. void f1(){
  3.   // ...
  4. }
  5.  
  6. void f2();
  7. void f2(){
  8.   // ...
  9. }
No tiene ningún sentido más que hacer más grande el código fuente.