[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!