[C] Passare array a funzione

giovanta-votailprof
Provando a compilare il programma, che mi sembra corretto, mi esce l'errore 'conflicting type for "Risultati" '.
Il programma dovrebbe acquisire due array nel main contenenti i gol fatti da squadra in casa (in) e in trasferta (out), passarli alla funzione insieme all'altro array di char res che contiene 1 X 2 a seconda di chi ha vinto la partita.

#include<stdio.h>
#define P 13
void Risultati (int*,int*,char*);
int main(){
    int in[P],out[P],i;
    char res[P];
    for(i=1;i<=P;i++)
    {printf("\n\n%d partita.",i);
     printf("\nGoal squadra in casa: ");
     scanf("%d",in[i]);
     printf("\nGoal squadra in trasferta: ");
     scanf("%d",out[i]);
     }
     Risultati(in,out,res);
     getch();}
     void Risultati (int casa[],int trasf[],int ris[]){
          int j;
          for(j=0;j<P;j++)
          {if(casa[j]>trasf[j])
           ris[j]=1;
           else if (trasf[j]>casa[j])
           ris[j]=2;
           else ris[j]=X;
           }
          printf("\nLa colonna vincente è: \n");
          for(j=0;j<P;j++)
          {printf("\n%d",ris[j]);}
          }

Risposte
Omega1
Ciao!

Ho letto il tuo programma, e ho trovato alcuni errori:

1°: nell' input dei risultati, tu scrivi: "scanf( "%d", in[ i ] ); " e "scanf( "%d", out[ i ] );", invece di "scanf( "%d", &in[ i-1 ]); " e "scanf( "%d", &out[ i-1 ]); "
( i-1 è dato dal fatto che hai impostato il ciclo in questo modo: for( i=1; i<=P; i++ ).

2° nel prototipo dichiari " void Risultati ( int*, int*, char* ) ;" mentre nella funzione " void Risultati ( int casa[ ], int trasf[ ], int ris[ ] ) ".

Ecco il codice corretto:


#include <stdio.h> 
#include <conio.h>
#define P 13 

void Risultati (const int[], const int[], char[]); 

int main()
{ 
    int in[P],out[P],i; 
    char res[P]; 
    for(i=1;i<=P;i++) 
    {
     printf("\n\n%d partita.",i); 
     printf("\nGoal squadra in casa: "); 
     scanf("%d",&in[i-1]); 
     printf("\nGoal squadra in trasferta: "); 
     scanf("%d",&out[i-1]); 
    } 
    Risultati(in,out,res);
    getch();
}
 
void Risultati (const int casa[], const int trasf[], char ris[])
{ 
          int j; 
          for(j=0;j<P;j++) 
          {
           if(casa[j]>trasf[j]) 
           ris[j]='1'; 
           if (casa[j]<trasf[j]) 
           ris[j]='2'; 
           if (casa[j]==trasf[j]) 
           ris[j]='X'; 
          } 
          printf("\nLa colonna vincente è: \n"); 
          for(j=0;j<P;j++)    printf("\n%d partita->%c",j,ris[j]);
}


giovanta-votailprof
il primo non è un errore.
La prima iterazione del for l'ho fatta partire volutamente da i=1 in modo che la printf non dica "0^ partita" ma "1^ partita".
Infatti non arriva a N-1 ma a N.
quella che dici tu sarebbe stata for(i=0;i
Parte una posizione dopo ma finisce anche una posizione dopo, quindi è la stessa cosa.

Grazie dell'altro errore invece, ecco cos'era :-D

Omega1
Il primo è l'errore più grave!
La funzione "scanf" va a memorizzare quello che trova nel buffer in un indirizzo della memoria!
Quindi tu non puoi scrivere scanf("%d", in); ( in mon può essere considerato un' indirizzo di memoria) ma devi inserire scanf("%d", &in);.

Ti ricordo inoltre che, nei vettori, l' indice oarte sempre da 0, non da 1!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.