A ver si alguien me puede ayudar con este asunto... resulta que tengo una función que sirve para inicializar los productos y otra para inicializar los clientes, y mientras estas dentro de esa misma funcion si que se "guardan" los datos introducidos y si haces referencia a ellos, mediante un printf por ejemplo muestra el contenido de la variable, pero cuando termina el subprograma es como si se borraran los datos que has introducido y entonces las siguentes funciones no tienen datos y no sirven para nada. Todo esta en valenciano pero lo que importa es lo de los datos que no es plan de ponerme a traducir xD no se si seran los parametros de las funciones o que lo que estara mal, pero yo creo que eso esta bien. Si alguien sabe que me pasa... que me ayude por favor xq llevo 2 dias dandole vueltas ya y hasta se lo he dicho al profesor y no ha sabido solucionarlo

por cierto mi compilador es el Dev-C++ si alguien lo puede comprobar con otro compilador... Muchas gracias
PD: si alguien lo prueba con otro compilador que ejecute la funcion mes_car (numero 3) xq con esa es con la que estava provando yo y tiene un printf ahi acoplado para ver si salen los datos xD
//INCLUDES
#include <stdio.h>
#include <string.h>
#include <iostream>
//CONSTANTS
#define NCLIEN 2
#define NPROD 2
//VARIABLES-VECTORS
typedef struct{int dia, mes, any;}fecha;
typedef struct{
char ref[5];
char nom[16];
int preu_u;
int quan;
}producte;
typedef struct{
char nif[10];
char nom[16];
char cog1[16];
char cog2[16];
}client;
typedef struct{
char ref[5];
int unitat;
char dni[10];
fecha compra, entrega;
float preu_total;
}comanda;
typedef struct{
producte p[NPROD];
client cl[NCLIEN];
comanda co[NCLIEN];
}tenda;
tenda t;
int op;
//PROTOTIPS FUNCIONS
int menu();
int iniprod(tenda t);
int inicli(tenda t);
void menys_deu(tenda t);
int menys_popular(tenda t);
int mes_car(tenda t);
//FUNCIÓ MAIN
int main(){
iniprod(t);
inicli(t);
do{
op=menu();
switch(op){
case 1:
menys_deu(t);
break;
case 2:
printf("El producte menys popular es el %i, %s", menys_popular(t), t.p[menys_popular(t)].nom);
break;
case 3:
printf("El mes producte mes car es el %i, %s", mes_car(t), t.p[mes_car(t)].nom);
break;
default:
printf("opcio no valida\n");
}
}while(op!=6);
system("PAUSE");
}
//IMPLEMENTACIÓ DE FUNCIONS
int menu(){
int i;
printf("\n\n\tOpcions:\n\n");
printf("\t\t1)Mostrar tots els productes amb menys de 10 unitats \n");
printf("\t\t2)Informar quin es l'article menys 'popular'\n");
printf("\t\t3)Informar quin es el producte mes car\n");
printf("\t\t6)Eixir\n");
scanf("%i", &i);
return i;
}
int iniprod(tenda t){
int i;
for(i=0;i<NPROD;i++){
printf("________________________\n");
printf(" Numero producte %i\n", i);
printf("________________________\n");
printf("Numero referencia:\n");
fflush(stdin);
gets(t.p[i].ref);
printf("Nom producte:\n");
fflush(stdin);
gets(t.p[i].nom);
printf("Preu unitari:\n");
fflush(stdin);
scanf("%i", &t.p[i].preu_u);
printf("Quantitat:\n");
scanf("%i", &t.p[i].quan);
}
printf("%i\n", t.p[0].preu_u);
printf("cadena:%s:",t.p[0].nom);
}
int inicli(tenda t){
int i;
for(i=0;i<NCLIEN;i++){
printf("________________________\n");
printf(" Numero client %i\n", i);
printf("________________________\n");
printf("NIF:\n");
fflush(stdin);
gets(t.cl[i].nif);
printf("Nom:\n");
fflush(stdin);
gets(t.cl[i].nom);
puts(t.cl[i].nom);
printf("Primer cognom:\n");
fflush(stdin);
gets(t.cl[i].cog1);
printf("Segon cognom:\n");
fflush(stdin);
gets(t.cl[i].cog2);
}
}
void menys_deu(tenda t){
int i;
for(i=0;i<NPROD;i++){
if(t.p[i].quan<10){
printf("%s\n", t.p[i].nom);
}
}
}
int menys_popular(tenda t){
int quan, posquan, i;
posquan=0;
quan=t.p[0].quan;
i=1;
printf("%d", quan);
while(i<NPROD){
if(quan<t.p[i].quan){
posquan=i;
quan=t.p[i].quan;
}
i++;
}
return posquan;
}
int mes_car(tenda t){
printf("%i\n", t.p[0].preu_u);
printf("cadena:%s:",t.p[0].nom);
int poscar, i, car;
poscar=0;
car=t.p[0].preu_u;
i=1;
printf("%i", car);
while(i<NPROD){
if(car<t.p[i].preu_u){
poscar=i;
car=t.p[i].preu_u;
}
i++;
}
return poscar;
}