Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    C,Vari errori nel codice

    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...

  2. #2
    certo ora chiamiamo il mago don ascimiento e ci facciamo spiegare qual'è tuo problemi e lo risolviamo

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    void ordine(struct prodotto*p);
    void carica(struct prodotto*p);
    metti struct prodotto *p, cioè lascia uno spazio, e fallo anche sotto nella definizione delle funzioni(cioè dove c'è il loro codice)



    Nel main
    carica(&magazzino);
    magazzino è un array, quindi è già un puntatore a prodotto; quindi la tua chiamata deve diventare
    codice:
    carica(magazzino);
    in carica(struct prodotto *p)
    for(i=0;i<dim;i++)
    dim non è dichiarato, non è inizializzato, non esiste!
    dovrai chiedere all'utente quanti prodotti vuole inserire e assegnarli a dim.

    Questi errori mi sono saltati all'occhio. Se potessi mandare l'elenco errori del compilatore faresti un piacere.

  4. #4
    dim è una costante (define)


    34 C:\Dev-Cpp\Lavori\menu scelta pulito.c [Warning] passing arg 1 of `carica' from incompatible pointer type

    70 C:\Dev-Cpp\Lavori\menu scelta pulito.c [Warning] passing arg 1 of `ordine' from incompatible pointer type


    Il problema è che quando visualizzo la merce mi visualizza solo la prima merce poi il resto è una serie di "0"

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    I 2 warning dovrebbero essere degli error perchè come carica(&magazzino) anche ordine(& magazzino) devono diventare carica(magazzino) e ordine(magazzino); magazzino è un array come ti ho detto e gli array in c sono puntatori; quindi magazzino è struct prodotto *; prova così ci sono buone probabilità che funzioni!

  6. #6
    Smanettando un pò qua e un pò là ora funge, grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.