Un par de detalles y recomendaciones:
No cerraste la función main de manera apropiada, seguramente si identás el código de una manera mejor te ayudaría mucho a evitar este tipo de errores...
Por otra parte:
int Num_productos, eleccion = 0, contador_productos = 0;
Num_productos = Pedir_cantidad();
Producto productos[Num_productos];
Evitá a toda costa generar un vector dinámicamente de esa manera:
Si estás forzado a utilizar C puro tenés funciones como
malloc o
calloc para almacenar memoria dinámicamente y liberandola con la función
free.
Si podés utilizar C++ te recomiendo utilizar
std::vector.
Otra recomendación sería nunca retornar objetos de estructuras de variables locales, dado a que se puede pisar los datos con llamadas a otras funciones posteriores:
Producto Agregar_producto(){
Producto articulo;
printf("Dame el nombre del producto:"); scanf("%s",&articulo.
Nombre_producto); printf("Dame el precio del producto:"); scanf("%f",&articulo.
precio); printf("Dame la cantidad disponible del producto:"); scanf("%d",&articulo.
cantidad); printf("Dame el codigo de barras:"); scanf("%d",&articulo.
codigo_barras); return articulo;
}
Y finalmente:
int Pedir_cantidad();
Producto Agregar_producto();
void Mostrar_productos(Producto *productos,int Num_productos);
void Mostrar_producto(Producto *productos,int posicion);
Snake case con mayúsculas no es utilizado en nombres de funciones de C...
B#