Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - puntatori a funzione
Forum - C/C++ - puntatori a funzione

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 18:08
Martedý, 25/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++;}}

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:41
Martedý, 25/05/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 ...
PM Quote
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 8:16
Mercoledý, 26/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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:48
Mercoledý, 26/05/2010
E che problemi hai? Errori?


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 15:57
Mercoledý, 26/05/2010
si ovvio xD...tipo la libreria stdio sn costretto ad includerla 2 volte...come potrei ovviare al problema???

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:20
Mercoledý, 26/05/2010
Testo quotato

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 ...
PM Quote
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 9:54
Giovedý, 27/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...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:01
Giovedý, 27/05/2010
Nel main mancano le include per le funzioni di libreria che usi


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 14:04
Giovedý, 27/05/2010
ti ringrazio pensavo ci fosse un modo x nn dichiararla due volte....

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo