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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
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