[C] Passare array a funzione
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.
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
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:
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]);
}
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
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
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!
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!