Oppure

Loading
25/05/10 16:08
domi90
il programma mi chiede di scomporre in funzioni il programma di inserimento e visualizzazione di un gruppo di auto...ho provato a implementarlo cosi ma mi indica errore dove ho i 3 null consecutivi..

#include<stdio.h>
#include<stdlib.h>

void dummy(void);int ins(int);void visualizza(void);
int index=0;
struct modello{
int codice;
char descrizione[30];
int anno;};

struct automobile{char marca[25];
struct modello mod;
int vendute;};
struct automobile car[20];

struct voce_menu{
char*msg;
void(*fun)(void);};
struct voce_menu menu[]={"\n\n 1.Inserisci modello\n",index=ins(index),
"2.Visualizza automobili\n",visualizza(),
"0.Fine\n",NULL,NULL,NULL};


main(){
int scelta;
int loop=0;
struct voce_menu *c;
while(loop==0){
for(c=menu;c->msg!=NULL;c++)
printf("%s",c->msg);
printf("\n scegliere opzione:";);
scanf("%d",&scelta);
if(scelta==0)loop=1;
else
(*menu[scelta-1].fun)();
}
system("PAUSE";); }

int ins(int pos){

printf("Inserisci marca:";);
scanf("%s",car[pos].marca);
printf("Inserisci descrizione:";);
scanf("%s",car[pos].mod.descrizione);
printf("Inserisci codice:";);
scanf("%d",&car[pos].mod.codice);
printf("Inserisci anno:";);
scanf("%d",&car[pos].mod.anno);
printf("Inserisci vendute:";);
scanf("%d",&car[pos].vendute);
return pos++;
}}


void visualizza(void){
int i;
struct automobile *p=&car[0];
for(i=0;i<index;i++){
printf("Marca: %s \n",p->marca);
printf("Modello\descrizione: %s \n",p->mod.descrizione);
printf("Modello\codice: %d \n",p->mod.codice);
printf("Modello\anno: %d \n",p->mod.anno);
printf("Venduti: %d \n\n",p->vendute);
*p++;}}
aaa
25/05/10 18:41
Le firme delle funzioni devono essere tutte eguali.

Non puoi avere una funzione

int ins(int);

che accetta e restituisce un int e una funzione

void visualizza(void);

che non accetta e non restituisce nulla.

Se le trasformi tutte nel primo tipo

int ins(int);
int visualizza(int);

allora puoi scrivere il loro nome (non altro, come hai fatto) per indicare l'indirizzo

struct voce_menu menu[] =
{
"\n\n1.Inserisci modello\n", ins,
"2.Visualizza automobili\n", visualizza,
"0.Fine\n", NULL,
NULL, NULL
};

E dovrai anche modificare il modo con cui le chiami, perchè in quel modo è sbagliato.
Ci sono anche altri piccoli errori ... ma li vedrai strada facendo.
26/05/10 6:16
domi90
ti ringrazio adesso funziona ...ti potrei chiedere come potrei gestirla su piu file sorgenti questa funzione??? io provo a inserire il main in un file del progetto e tutto il resto nell altro dichiarando extern solo la struttura automobile..
Ultima modifica effettuata da domi90 26/05/10 7:16
aaa
26/05/10 7:48
E che problemi hai? Errori?
26/05/10 13:57
domi90
si ovvio xD...tipo la libreria stdio sn costretto ad includerla 2 volte...come potrei ovviare al problema???
aaa
26/05/10 15:20
Postato originariamente da domi90:

si ovvio xD...


La mia non voleva essere una domanda ma una richiesta ... mostraci come hai organizzato il tutto e quali errori hai avuto durante la compilazione ...
27/05/10 7:54
domi90
ho scritto ovvio solo xke passo piu tempo su questo blog a domandare che a fare programmi..cmq l'ho organizzato cosi

file main
extern struct voce_menu lista;
main(){
int scelta;
int loop=0;
struct voce_menu *c;
while(loop==0){
for(c=lista;c->msg!=NULL;c++)
printf("%s",c->msg);
printf("\n scegliere opzione:";);
scanf("%d",&scelta);
if(scelta==1)
z++;
if(scelta==0)loop=1;
else
(*lista[scelta-1].fun)();
}
system("PAUSE";); }
file con funzioni e strutture:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
void ins(void), visualizza(void);
extern int z=0;
struct modello{
int codice;
char descrizione[30];
int anno;};

struct automobile{char marca[25];
struct modello mod;
int vendute;};
struct automobile car[20];

struct voce_menu{
char*msg;
void(*fun)(void);};
struct voce_menu lista[]={" 1.Inserisci modello \n",ins,
" 2.Visualizza automobili \n",visualizza,
" 0.Fine \n",NULL,NULL,NULL};
void ins(void){
static int pos=0;
if(pos>=20){
printf("Non c'è spazio per inserire";);}
else{
printf("Inserisci marca:";);
scanf("%s",car[pos].marca);
printf("Inserisci descrizione:";);
scanf("%s",car[pos].mod.descrizione);
printf("Inserisci codice:";);
scanf("%d",&car[pos].mod.codice);
printf("Inserisci anno:";);
scanf("%d",&car[pos].mod.anno);
printf("Inserisci vendute:";);
scanf("%d",&car[pos].vendute);
pos++;}}


void visualizza(void){
int i;
struct automobile *p=&car[0];
for(i=0;i<z;i++){
printf("Marca: %s \n",p->marca);
printf("Modello descrizione: %s \n",p->mod.descrizione);
printf("Modello codice: %d \n",p->mod.codice);
printf("Modello anno: %d \n",p->mod.anno);
printf("Venduti: %d \n\n",p->vendute);
*p++;}}
l'errore me lo da poiche nn riconosce la printf,la scanf e il null nel file main...
aaa
27/05/10 8:01
Nel main mancano le include per le funzioni di libreria che usi