Problema al leer caracteres [C]

Iniciado por S4ms3pi0l__, 16 Noviembre 2017, 18:45 PM

0 Miembros y 1 Visitante están viendo este tema.

S4ms3pi0l__

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:


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
void menu();
void menu(){
printf("\t*****CONTROL DE INVENTARIO*****\n");
printf("1.-Listado del inventario actual\n2.-Busqueda de productos\n3.-Ingresos totales\n4.-SALIR\n");
printf("--------------------------------\n");
}
void salida();
void salida(){
printf("Saliendo del programa... Hasta pronto!\n");
}
struct Inventario{
char codigo[10];
char nombre[25];
int cantidad;
float pventa;
};
int Registrar(Inventario x[], int i);
int Registrar(Inventario x[], int i){
for(i=0;i<=2;i++){
printf("\tRegistrar productos\n");
printf("Producto #%d \n",i);
printf("Ingrese el codigo del producto: ");
gets(x[i].codigo);
fflush(stdin);
printf("\nIngrese el nombre del producto: ");
gets(x[i].nombre);
fflush(stdin);
do{
printf("\nIngrese la cantidad: ");
scanf("%d",&x[i].cantidad);
}while(x[i].cantidad<=0);
fflush(stdin);
do{
printf("\nIngrese el precio de venta: ");
scanf("%f",&x[i].pventa);
}while(x[i].pventa<=0);
fflush(stdin);
system("cls");
}
}
void Lista(int i, Inventario x[]);
void Lista(int i, Inventario x[]){
for(int j=0;j<=2;j++){
printf("%s \t %s \t %d \t %0.2f \n",x[j].codigo, x[j].nombre, x[j].cantidad, x[j].pventa);
}
}
/*Aqui esta el problema*/
void Busqueda(char cod[10], Inventario x[], int i);
void Busqueda(char cod[10], Inventario x[], int i){
printf("Ingrese el codigo que desea buscar: ");
scanf("%s",&cod);
fflush(stdin);
for(int j=0;j<=2;j++){
if(strcmp(x[j].codigo,cod)==0){
printf("\nProducto: %s \n",x[j].nombre);
                        break;
}else{
printf("\nNo Existe\n");
                        break;
}
}
}
/*                                        */
float Venta(Inventario x[], int i);
float Venta(Inventario x[], int i){
float total;
for(int j=0;j<=2;j++){
total+=x[j].cantidad*x[j].pventa;
}
printf("Ingreso total: %0.2f \n",total);
}
int main(){
struct Inventario prod[20];
int i=0, op;
char cod[10];
bool salir = true;
Registrar(prod,i);
do{
system("cls");
menu();
do{
printf("\nSeleccione una opcion: ");
scanf("%d",&op);
}while(op<=0 || op>=5);
system("cls");
switch(op){
case 1:{
printf("\tINVENTARIO ACTUAL\n");
Lista(i,prod);
system("PAUSE");
system("cls");
break;
}
case 2:{
printf("\tBUSQUEDA\n");
Busqueda(cod, prod, i);
system("PAUSE");
system("cls");
break;
}
case 3:{
printf("\tVENTA TOTAL DEL INVENTARIO\n");
Venta(prod, i);
system("PAUSE");
system("cls");
break;
}
case 4:{
salida();
salir = false;
break;
}
}
}while(salir==true);
return 0;
}

MAFUS

No hace falta que declares una función si la defines acto seguido. Es rellenar código sin importar. Es decir:

void f1();
void f1(){
   // ...
}

void f2();
void f2(){
   // ...
}

No tiene ningún sentido más que hacer más grande el código fuente.