domi90 (Normal User)
Rookie
Messaggi: 22
Iscritto: 07/05/2010
|
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++;}}
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
domi90 (Normal User)
Rookie
Messaggi: 22
Iscritto: 07/05/2010
|
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 il 26/05/2010 alle 9:16 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
E che problemi hai? Errori?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
domi90 (Normal User)
Rookie
Messaggi: 22
Iscritto: 07/05/2010
|
si ovvio xD...tipo la libreria stdio sn costretto ad includerla 2 volte...come potrei ovviare al problema???
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
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 ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
domi90 (Normal User)
Rookie
Messaggi: 22
Iscritto: 07/05/2010
|
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...
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Nel main mancano le include per le funzioni di libreria che usi
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
domi90 (Normal User)
Rookie
Messaggi: 22
Iscritto: 07/05/2010
|
ti ringrazio pensavo ci fosse un modo x nn dichiararla due volte....
|
|