|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
[c]Problema con programma in c con strutture
Ecco il codice:
Codice:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct prodotto //Struttura del prodotto
{
char nome_prodotto[50];
char descrizione_prodotto[1000];
int quantita_vendute;
int prezzo_vendita;
int prezzo_acquisto;
int guadagno_struttura;
};
struct guadagno_totale //Struttura che conta il guadagno totale
{
float guadagno_tot;
};
typedef struct guadagno_totale tot;
typedef struct prodotto articolo; /*Ridefinizione di struct prodotto in
articolo*/
//Prototipi di funzione
int insert (articolo [],int); //Funzione che carica i dati in struttura.
float guadagno (articolo [],int,tot); //Funzione che calcola il guadagno.
void main()
{
int scelta,controllo,totale,x;
articolo vettore[1000];
tot total;
do
{
printf("\n MENU' PRINCIPALE");
printf("\n 1)Inserisci Prodotto");
printf("\n 2)Controlla Il Guadagno Totale Della Giornata");
printf("\n 0)Uscita dal programma");
printf("\n Scelta: ");
scanf ("%d", &scelta);
switch(scelta)
{
case 1: controllo=insert(vettore,x);
break;
case 2: totale=guadagno(vettore,controllo,total);
printf("\nFinora hai guadagnato %d Euro", controllo);
break;
case 0: exit(EXIT_SUCCESS);
default: printf("\nOpzione non valida!");
}
} while(scelta!=0);
}
//DEFINIZIONE DELLE FUNZIONI
int insert(articolo vettore[],int x)
{
int i;
printf("\nQuanti Prodotti hai venduto?(MAX 1000): ");
scanf ("%d", &x);
for(i=0;i<x;i++)
{
printf("\nInserisci il nome del prodotto venduto (MAX 50 PAROLE): ");
fflush(stdin);
gets (vettore[i].nome_prodotto);
printf("\nDescrivi Il Prodotto (MAX 1000 PAROLE): ");
fflush(stdin);
gets (vettore[i].descrizione_prodotto);
printf("\nQuanti prodotti hai venduto?: ");
scanf ("%d", &vettore[i].quantita_vendute);
printf("\nInserisci il prezzo di acquisto del prodotto: ");
scanf ("%d", &vettore[i].prezzo_acquisto);
printf("\nA quanto hai venduto il prodotto?: ");
scanf ("%d", &vettore[i].prezzo_vendita);
}
return x;
}
float guadagno (articolo vettore[],int controllo,tot total)
{
int prezzo_vend,prezzo_acqu,quantita_vend,i,totale;
for(i=0;i<controllo;i++)
{
prezzo_vend=vettore[i].prezzo_vendita;
prezzo_acqu=vettore[i].prezzo_acquisto;
quantita_vend=vettore[i].quantita_vendute;
totale=(prezzo_vend-prezzo_acqu)*quantita_vend;
vettore[i].guadagno_struttura=totale;
}
for(i=0;i<controllo;i++)
total.guadagno_tot=total.guadagno_tot+vettore[i].guadagno_struttura;
return total.guadagno_tot;
}
"Thread stopped: c:\Document ad settings\games\desktop\struct.exe Fault: access violition 0x40108b: write of address 0x30f88" Ma che è?? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Posso chiederti che compilatore stai usando? perchè se non erro <conio.h> non è una funzione standard.
Potrebbe essere? Poi, un'altra cosa ma che non è chiara a me, anche perchè pure io sono proprio agli inizi, ma nella tua struttura "prodotto", l'istanziazione dov'è? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
borland c++
Nella struttura al posto di 500 al posto di 1000, e funzia come mai?? Non riesce ad allocare lo spazio necessario?? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2001
Città: Salerno
Messaggi: 649
|
la struttura prodotto occupa un ampio intervallo di memoria. Nel main dichiari una array di 1000 prodotti e sommato allo spazio che viene dedicato a ogni prodotto sicuramente si avrà un violazione di accesso in memoria. Qui scatta il meccanismo di protezione degli spazi di indirizzi di memoria messo a disposizione dal sistema operativo. Cmq dipende anche dal compilatore. Prova a dichiarare un array di 50 elementi e vedrai che riuscirai ad allocare la struttura anche con escrizione_prodotto da 1000 elementi.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Usa una lista
Non funziona perchè esauisce lo stack... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:10.



















