PDA

Visualizza la versione completa : C,Vari errori nel codice


nubsthead
27-03-2010, 15:10
/*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...

xnavigator
27-03-2010, 15:56
certo ora chiamiamo il mago don ascimiento e ci facciamo spiegare qual'è tuo problemi e lo risolviamo

p91paul
27-03-2010, 17:28
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

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.

nubsthead
27-03-2010, 17:44
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"

p91paul
27-03-2010, 18:06
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!

nubsthead
27-03-2010, 19:38
Smanettando un pò qua e un pò là ora funge, grazie mille

Loading