Non riesco a capire gli errori in questo codice (Linguaggio C)

di il
3 risposte

Non riesco a capire gli errori in questo codice (Linguaggio C)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 5
#define N 4
typedef struct {
   char targa[7];
   int ora_ingresso;
   int fila;
   int posto;
} automobile;
void mostra(int park);
void calcola (int park, int stampa);
void ingresso (int park, automobile dati);
void uscita (int*, int, automobile);
void incasso (int*);
void svuota (int*, int, automobile);

void menu (int *p, int park, automobile dati[][N]) {
   int n;
   int incasso_attuale=0;
   printf("\n");
   printf("\n");
   printf("\n----------- MENU ----------\n");
printf("(1) mostra parcheggio\n");
printf("(2) calcola posti liberi e occupati\n");
printf("(3) ingresso auto\n");
printf("(4) uscita auto\n");
printf("(5) incasso attuale\n");
printf("(6) svuota parcheggio\n");
printf("(7) esci\n");
do {
       printf ("Inserisci numero funzione: ");
       scanf  ("%d", &n);
} while (n<1 || n>7);
switch (n) {
   case 1:
       mostra(park);
       break;
   case 2:
       calcola(park, 1);
       break;
   case 3:
       ingresso(park, dati);
       break;
   case 4:
       uscita(&incasso_attuale, park, dati);
       break;
   case 5:
       incasso(&incasso_attuale);
       break;
   case 6:
       svuota (&incasso_attuale, park, dati);
       break;
   case 7:
       printf ("\n-------------- PROGRAMMA TERMINATO --------------\n");
       *p=0;
       break;
}
}
int main()
{
   int parcheggio[M][N];
   int sentinel=1;
   automobile dati_parcheggio[M][N];
   for (int i=0; i<M; i++) {
       for (int j=0; j<N; j++) {
           parcheggio[M][N] = 0;
           dati_parcheggio[i][j].targa[0]='\0';
           dati_parcheggio[i][j].ora_ingresso=0;
           dati_parcheggio[i][j].fila=0;
           dati_parcheggio[i][j].posto=0;
       }
   }
   do {
       menu (&sentinel, parcheggio, dati_parcheggio);
   } while (sentinel==1);
   return 0;
}
//Funzione n1
void mostra (int P[][N]) {
   printf ("\n-------------- MOSTRA PARCHEGGIO --------------\n");
   for (int i=0; i<M; i++) {
       printf ("Fila %d: ", i+1);
       for (int j=0; j<N; j++) {
           if (P[i][j]==0)
               printf (" . ");
           else
               printf (" X ");
       }
       printf ("/n");
   }
}
//Funzione 2
void calcola (int A[][N], int stampa) {
   int lib=0, occ=0;
   for (int i=0; i<M; i++) {
       for (int j=0; j<N; j++) {
               if (A[i][j]==0)
                   lib++;
               else
                   occ++;
       }
   }
   if (stampa==1) {
   printf ("\n-------------- POSTI LIBERI E OCCUPATI --------------\n");
   printf ("Posti totali: %d\n", N*M);
   printf ("Posti liberi: %d\n", lib);
   printf ("Posti occupati: %d\n", occ);
   }
   return occ;
}
//Funzione n3
void ingresso (int B[][N], automobile data[][N]) {
   int F, P;
   printf ("-------------- INGRESSO AUTO --------------\n");
   if (calcola(B, 0) == N*M) {
       printf ("PARCHEGGIO PIENO\n");
       return;
   }
   do {
       printf ("Inserisci i dati dell'automobile:\n");
       printf ("Fila: ");
       scanf  ("%d", &F);
       printf ("Posto: ");
       scanf  ("%d", &P);
   } while (F<1 || F>M || P<1 || P>N || B[F-1][P-1]);
   B[F-1][P-1]=1;
   data[F-1][P-1].fila=F;
   data[F-1][P-1].posto=P;
   printf ("Targa auto: ");
   scanf ("%s", data[F-1][P-1].targa);
   do {
       printf ("Orario di ingresso: ");
       scanf  ("%d", &data[F-1][P-1].ora_ingresso);
   } while (data[F-1][P-1].ora_ingresso<6||data[F-1][P-1].ora_ingresso>22);
}
//Funzione n4
void uscita (int *e, int C[][N], automobile data[][N]) {
   char tar[7];
   int ora_uscita;
   printf ("\n-------------- USCITA AUTO --------------\n");

   do {
       printf ("Inserire targa: ");
       scanf  ("%s", tar);
   } while (strlen(tar)>7);
   int continua=1;
   for (int i=0; i<M && continua; i++) {
       for (int j=0; j<N && continua; j++) {
           if (!(strcmp(data[i][j].targa,tar))) {
               C[i][j]=0;
               printf ("Inserire orario di uscita: ");
               scanf  ("%d", &ora_uscita);
               *e += (ora_uscita - data[i][j].ora_ingresso)*5;
               printf ("Pagare %d euro!", (ora_uscita - data[i][j].ora_ingresso)*5);
               data[i][j].fila=0;
               data[i][j].posto=0;
               data[i][j].ora_ingresso=0;
               data[i][j].targa[0]='\0';
               continua=0;
           }
       }
   }
}
//Funzione n5
void incasso(int *p) {
   printf ("\n-------------- INCASSO --------------\n");
   printf ("L'incasso giornaliero attuale vale: %d euro", *p);
}
//Funzione n7
void svuota (int *p, int D[][N], automobile data[][N]) {
   printf ("\n-------------- CHIUSURA PARCHEGGIO --------------\n");
   for (int i=0; i<M; i++) {
       for (int j=0; j<N; j++) {
           if (D[i][j]!=0)
              D[i][j]=0;
       }
   }
   for (int i=0; i<M; i++) {
       for (int j=0; j<N; j++) {
           data[i][j].fila=0;
           data[i][j].posto=0;
           data[i][j].ora_ingresso=0;
           data[i][j].targa[0]='\0';
       }
   }
   *p=0;
   printf ("Parcheggio svuotato!\n");
}

Il compilatore restituisce i seguenti errori:

- "incompatible type for argument" per le variabili di tipo automobile nelle funzioni che utilizzano questo tipo di variabile;

-"void value not ignored as it ought to be" nella funzione “ingresso”;

-"conflicting types" nelle funzioni mostra "calcola ""ingresso", "uscita" e "svuota".

Non riesco a capire gli errori che ho fatto. Grazie mille anticipatamente per il vostro aiuto. 

3 Risposte

  • Re: Non riesco a capire gli errori in questo codice (Linguaggio C)

    void ingresso (int park, automobile dati);
    
    ...
    
    void ingresso (int B[][N], automobile data[][N]) 

    Ti sembra che il prototipo sia rispettato?

    P.S. usa titoli adeguati per le discussioni

  • Re: Non riesco a capire gli errori in questo codice (Linguaggio C)

    Mi scuso per il titolo, sono nuovo non so bene come funziona. Grazie mille per avermi fatto notare l'errore. Nel cercare di risolvere gli errori iniziali ho fatto confusione con le intestazioni. Ho corretto ma gli errori persistono.    

    Ecco il codice corretto (o spero):

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define M 5
    #define N 4
    typedef struct {
       char targa[7];
       int ora_ingresso;
       int fila;
       int posto;
    } automobile;
    void mostra(int);
    void calcola (int, int);
    void ingresso (int, automobile);
    void uscita (int*, int);
    void incasso (int*);
    void svuota (int*, int, automobile);
    
    void menu (int *p, int park[][N], automobile dati[][N]) {
       int n;
       int incasso_attuale=0;
       printf("\n");
       printf("\n");
       printf("\n----------- MENU ----------\n");
    printf("(1) mostra parcheggio\n");
    printf("(2) calcola posti liberi e occupati\n");
    printf("(3) ingresso auto\n");
    printf("(4) uscita auto\n");
    printf("(5) incasso attuale\n");
    printf("(6) svuota parcheggio\n");
    printf("(7) esci\n");
    do {
           printf ("Inserisci numero funzione: ");
           scanf  ("%d", &n);
    } while (n<1 || n>7);
    switch (n) {
       case 1:
           mostra(park);
           break;
       case 2:
           calcola(park, 1);
           break;
       case 3:
           ingresso(park, dati);
           break;
       case 4:
           uscita(&incasso_attuale, park, dati);
           break;
       case 5:
           incasso(&incasso_attuale);
           break;
       case 6:
           svuota (&incasso_attuale, park, dati);
           break;
       case 7:
           printf ("\n-------------- PROGRAMMA TERMINATO --------------\n");
           *p=0;
           break;
    }
    }
    int main()
    {
       int parcheggio[M][N];
       int sentinel=1;
       automobile dati_parcheggio[M][N];
       for (int i=0; i<M; i++) {
           for (int j=0; j<N; j++) {
               parcheggio[M][N] = 0;
               dati_parcheggio[i][j].targa[0]='\0';
               dati_parcheggio[i][j].ora_ingresso=0;
               dati_parcheggio[i][j].fila=0;
               dati_parcheggio[i][j].posto=0;
           }
       }
       do {
           menu (&sentinel, parcheggio, dati_parcheggio);
       } while (sentinel==1);
       return 0;
    }
    //Funzione n1
    void mostra (int P[][N]) {
       printf ("\n-------------- MOSTRA PARCHEGGIO --------------\n");
       for (int i=0; i<M; i++) {
           printf ("Fila %d: ", i+1);
           for (int j=0; j<N; j++) {
               if (P[i][j]==0)
                   printf (" . ");
               else
                   printf (" X ");
           }
           printf ("/n");
       }
    }
    //Funzione 2
    void calcola (int A[][N], int stampa) {
       int lib=0, occ=0;
       for (int i=0; i<M; i++) {
           for (int j=0; j<N; j++) {
                   if (A[i][j]==0)
                       lib++;
                   else
                       occ++;
           }
       }
       if (stampa==1) {
       printf ("\n-------------- POSTI LIBERI E OCCUPATI --------------\n");
       printf ("Posti totali: %d\n", N*M);
       printf ("Posti liberi: %d\n", lib);
       printf ("Posti occupati: %d\n", occ);
       }
       return occ;
    }
    //Funzione n3
    void ingresso (int B[][N], automobile data[][N]) {
       int F, P;
       printf ("-------------- INGRESSO AUTO --------------\n");
       if (calcola(B, 0) == N*M) {
           printf ("PARCHEGGIO PIENO\n");
           return;
       }
       do {
           printf ("Inserisci i dati dell'automobile:\n");
           printf ("Fila: ");
           scanf  ("%d", &F);
           printf ("Posto: ");
           scanf  ("%d", &P);
       } while (F<1 || F>M || P<1 || P>N || B[F-1][P-1]);
       B[F-1][P-1]=1;
       data[F-1][P-1].fila=F;
       data[F-1][P-1].posto=P;
       printf ("Targa auto: ");
       scanf ("%s", data[F-1][P-1].targa);
       do {
           printf ("Orario di ingresso: ");
           scanf  ("%d", &data[F-1][P-1].ora_ingresso);
       } while (data[F-1][P-1].ora_ingresso<6||data[F-1][P-1].ora_ingresso>22);
    }
    //Funzione n4
    void uscita (int *e, int C[][N], automobile data[][N]) {
       char tar[7];
       int ora_uscita;
       printf ("\n-------------- USCITA AUTO --------------\n");
    
       do {
           printf ("Inserire targa: ");
           scanf  ("%s", tar);
       } while (strlen(tar)>7);
       int continua=1;
       for (int i=0; i<M && continua; i++) {
           for (int j=0; j<N && continua; j++) {
               if (!(strcmp(data[i][j].targa,tar))) {
                   C[i][j]=0;
                   printf ("Inserire orario di uscita: ");
                   scanf  ("%d", &ora_uscita);
                   *e += (ora_uscita - data[i][j].ora_ingresso)*5;
                   printf ("Pagare %d euro!", (ora_uscita - data[i][j].ora_ingresso)*5);
                   data[i][j].fila=0;
                   data[i][j].posto=0;
                   data[i][j].ora_ingresso=0;
                   data[i][j].targa[0]='\0';
                   continua=0;
               }
           }
       }
    }
    //Funzione n5
    void incasso(int *p) {
       printf ("\n-------------- INCASSO --------------\n");
       printf ("L'incasso giornaliero attuale vale: %d euro", *p);
    }
    //Funzione n7
    void svuota (int *p, int D[][N], automobile data[][N]) {
       printf ("\n-------------- CHIUSURA PARCHEGGIO --------------\n");
       for (int i=0; i<M; i++) {
           for (int j=0; j<N; j++) {
               if (D[i][j]!=0)
                  D[i][j]=0;
           }
       }
       for (int i=0; i<M; i++) {
           for (int j=0; j<N; j++) {
               data[i][j].fila=0;
               data[i][j].posto=0;
               data[i][j].ora_ingresso=0;
               data[i][j].targa[0]='\0';
           }
       }
       *p=0;
       printf ("Parcheggio svuotato!\n");
    }  
  • Re: Non riesco a capire gli errori in questo codice (Linguaggio C)

    Scusa ma non vedo le correzioni richieste. Hai lasciato tutto come prima

Devi accedere o registrarti per scrivere nel forum
3 risposte