Buenas noches.
Estoy a medias tratando de hacer un programa simple en C, se trata de listar los materiales de varias sucursales y cada item tiene su restricción para poder ser agregado al sistema, el problema es cuando estoy ingresando me genera un error y de verdad no entiendo que es lo que pasa, si alguien me puede ayudar muchas gracias!
Estoy a medias tratando de hacer un programa simple en C, se trata de listar los materiales de varias sucursales y cada item tiene su restricción para poder ser agregado al sistema, el problema es cuando estoy ingresando me genera un error y de verdad no entiendo que es lo que pasa, si alguien me puede ayudar muchas gracias!
Código [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define N 50
# define M 2000000000
typedef struct
{
int sucursal;
int codItem, cant;
float precUni, precVent ;
char descItem[50];
int lleno;
}fac;
fac inventario[10];
void admitir () ;
void agregar();
void caracteres();
void consultar();
void normalizar();
void vaciar() ;
void restriccion();
int op ;
int i ;
int main( void ) {
void vaciar() ;
aqui :
/*Swich para ingresar una opcion */
printf("Ferreteria Algo me gano: \n\n");
printf(" 1. Finalizar\n");
printf(" 2. Agregar\n");
printf(" 3. Consultar\n");
printf(" 4. Modificar\n");
printf(" 5. Listar\n");
printf(" Selecione una opcion: "); scanf("%i", &op);
printf("\n\n");
switch(op)
{
case 1: {exit(1); break;}
case 2: {agregar(); goto aqui;}
case 3: {consultar(); goto aqui;}
case 4: { break;}
case 5: { break;}
default : {system("cls");goto aqui;}
}
printf("\n");
getchar();
return 0; }
void agregar()
{
int op2 ;
/*Aqui agregamos los elementos de la estructura y restrigimos con una funcion */
system("cls");
printf("Ingrese la cantidad de elementos que desea agregar: "); scanf("%i", &op2);
for ( i = 0; i < op2; ++i)
{
if (inventario[i].lleno == 0)
{
printf("\n\nPara el elemento #%i \n", i+1 );
printf("Ingrese Codigo de Item: "); scanf("%i",&inventario[i].codItem);
printf("Ingrese Desc Item: "); caracteres(inventario[i].descItem);
printf("Ingrese Cantidad : ");
restriccion(inventario[i].cant, M , 12);
printf("Ingrese Precio Unitario: ");
restriccion(inventario[i].precUni, M, 10000);
printf("Ingrese Precio de Venta: ");
restriccion(inventario[i].precVent, M, 15000);
printf("Ingrese la Sucursal :");
restriccion(inventario[i].sucursal, 24, 1);
inventario[i].lleno = 1 ;
printf("\n");
}
}
system("cls");
}
void caracteres(char k[N])
{
/* Aqui aseguramos que no se ingresen cadenas de caracteres vacias */
cvacia:
fflush(stdin);
fgets(k,N,stdin);
normalizar(k);
if (strlen(k) == 0)
{
printf("Llenar este campo es obligatorio\n");
goto cvacia;
}
}
void vaciar()
{
/* Con la variable .lleno pordemos controlar que registro ya ha sido usado */
for ( i = 0; i < 10; ++i)
inventario[i].lleno = 0 ;
}
void normalizar(char k[N])
{
int i;
/* Aqui quitamos el problema del fgets que termina las cadenas con \n */
for (i = 0; i < N; ++i)
{
if( k[i] == '\n' )
{
k[i] = '\0';
}
}
}
void consultar()
{
/* funcion para consultar los items ya agregados previamente */
int op3, z = 0 ;
printf("Ingrese el codigo del elemento: "); scanf("%i", &op3);
printf("Codigo Item | Desc-Item | Cantidad | Prec Unitario | Prec Venta | Sucursal |\n");
for ( i = 0; i <10 ; ++i)
{
if (inventario[i].codItem == op3)
{
printf(" %i %s %i %.2f %.2f %i \n", inventario[i].codItem,
inventario[i].descItem,inventario[i].cant, inventario[i].precUni,inventario[i].precVent, inventario[i].sucursal);
++z ;
}
}
if (z == 0)
printf("\n\nNo se encontro el item seleccionado\n\n");
system("pause"); system("cls");
}
void restriccion(int var, int max, int menor)
{
/* Aqui paso por parametro las restricciones para los datos de cada registro*/
iterar:
fflush(stdin); scanf("%i",&var);
/*En la restriccion para precio unitario deberia pasar por el primer if
ya que max == M pero no lo hace */
if (max == M)
{
if (var <= menor)
{
printf("Ingrese un Valor mayor a %i \n", menor);
goto iterar ;
}
}
else if (var < menor || var > max)
{
printf("Ingrese un valor entre %i & %i\n", menor, max );
goto iterar ;
}
}