codice:
/*programma in C che mi permetta di gestire un numero di n merci all'interno di un magazzino.
Inoltre, dopo aver caricato la merce (ancora non ho studiato i file e non so se possano servire a 
migliorare e/o semplificare il mio algortimo) ho la possibilità di:

-Visualizzare una lista con tutta la merce,il relativo codice e quantità;
-Eseguire un ordine( acquistare merce e quindi detrarla dalla quantità del magazzino);
-Visualizzare tutti gli ordini eseguiti precedentemente;

Utilizza un menù di scelta che gestisce le 3 funzioni*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define dim 20


struct prodotto{
       int codice;
       char descrizione[20];
       int quantita;
       };
       
struct  prodotto magazzino[1000];

void menu();

void ordine(struct prodotto*p);
void carica(struct prodotto*p);
void visualizza();
void visualizzazione();

int main()
{   
    printf("                        *CARICAMENTO MERCE*\n\n");
    carica(&magazzino);
	menu();
	return 0;
}

void menu()
{
	int scelta;
	char torna;
	do
	{
        system("cls");
		printf("Menu' principale \n\n");

		/*Inizio elenco delle funzioni disponibili in output*/
		printf(" [1]: VISUALIZZA I PRODOTTI\n");
		printf(" [2]: ESEGUI UN ORDINE\n");
		printf(" [3]: VISUALIZZA ORDINI GIA' ESEGUITI\n");
		printf(" [4]: ESCI\n");
		/*fine elenco funzioni*/

		printf("\nEffettua la tua scelta: ");
		scanf("%d",&scelta);

		/*Inizio struttura di controllo per permettere la scelta
		della funzione desiderabile, è possibile inserire altre funzioni*/
		switch (scelta)
		{
			case 1:
				system("cls");
			    visualizza();
				system("pause");
				system("cls");
				break;
			case 2:
				system("cls");
				ordine(& magazzino);
				system("pause");
				system("cls");
				break;
			case 3:
				system("cls");
				
				system("pause");
				system("cls");
				break;
			case 4:
				system("cls");
				printf("\aHai premuto il tasto per uscire\n\n\n");
                break;
			default:
				printf("Numero non valido \n");
		}
		printf("Si desidera tornare al Menu' Principale?\n\n");
		printf("[y] Si, desidero tornare al Menu' Principale \n");
		printf("[n] No, desidero uscire \n\n");
		printf("Effettua la tua scelta: ");
		scanf("%s",&torna);
	}
	while (torna!='n');
}

/*Inizio implementazione funzioni personalizzate,
È possibile modificarle o aggiungere altre funzioni*/

void ordine(struct prodotto*p){
     char x[20];
     int y;
     visualizzazione();
     printf("                            *ORDINE*\n\n");
     printf("Inserisci il nome del prodotto da acquistare: ");
     scanf("%s", x);
     printf("Inserisci la quantita: ");
     scanf("%d",&y);
     if (strcmp(x,p->descrizione)==0){
                             p->quantita=(p->quantita)-y;
                           }
     else{
          printf("prodotto non presente nel magazzino\n\n");                   
     }
     if(y<p->quantita){
     printf("\nEcco il tuo ordine: ");
     printf("%s %d",x,y); 
     printf("\n\n\n");
     }
     else{
     printf("quantita' richiesta maggiore di quella presente nel magazzino\n");      
       }}    

void carica(struct prodotto*p){
     int i;                                       
     for(i=0;i<dim;i++){
     printf("Inserisci il codice del prodotto: ");
     scanf("%d",&(p->codice)); 
     fflush(stdin);
     printf("\n\aInserisci il nome del prodotto: ");
     gets(p->descrizione);
     printf("\n\aInserisci la quantita' del prodotto: ");
     scanf("%d",&(p->quantita));
     printf("\n");
     }
     printf("\n\n\n\n\n\n\a");
     return;
     }

void visualizza()
{
      int i;
     for(i=0;i<dim;i++)
     printf("Codice: %d \nNome: %s \nQuantita: %d\n\n", magazzino[i].codice, magazzino[i].descrizione,magazzino[i].quantita);
     return;
}

void visualizzazione()
{
     int i;
     printf("                            *INFO PRODOTTI*\n\n");
     for(i=0;i<dim;i++)
     printf("Codice: %d  Nome: %s\n\n", magazzino[i].codice, magazzino[i].descrizione);
     return;
}
Mi dareste una mano a risolvere l algoritmo? dire che sto impazzendo è dire poco...