Ciao, sto scrivendo un programma molto elementare in C, ma ho un problema che non riesco a risolvere di visibilità di un vettore multidimensionale. :
#include <stdio.h>
#define VEND 5 // asse orizzontale matrice SaleS
#define PROD 6 // asse verticale matrice SaleS
int SaleS [PROD][VEND] = {{0},{0}} ; // Matrice inizializzata a 0
void Calcolo ( int IdVend) ; // popola SaleS invocata da main
void Stampa (void) ; // stampa i risultati invocata da main
int Totali ( int x, int y ) ; // restituisce a Stampa i totali per prodotto e venditore
int main(void)
{
int scelta ; // variabili di prompt
// presentazione programma
printf ("****************************************************************************************************\n") ;
printf ("* *\n") ;
printf ("* *\n") ;
printf ("* Bisboccia Srl *\n") ;
printf ("* Contabilità *\n") ;
printf ("* *\n") ;
printf ("* *\n") ;
printf ("* *\n") ;
printf ("****************************************************************************************************\n\n\n\n") ;
printf ("Inserire l'ID del Venditore : (EOF to End)\n") ;
while ( ( scelta = getchar() ) != EOF ) { // iterà il ciclo per la registrazione dei dati
switch ( scelta ) {
case '1' :
case '2' :
case '3' :
case '4' :
Calcolo (scelta) ; // richiama la funzione per il popolamento della matrice
printf ("Inserire l'ID del Venditore: (EOF to End)\n");
printf ("%d da calcolo\n", SaleS [1][1] ) ;
break ;
case '\t' :
case '\n' :
case ' ' :
break ;
default:
printf ("Valore non valido\n") ;
printf ("Inserire l'ID del Venditore: (EOF to End)\n");
break ;
}
}
printf ("%d da main\n", SaleS [1][1] ) ; // stampa di controllo per la messa a punto
Stampa () ; // stampa i risultati in formato tabulare
printf ("Termine Programma\n");
return 0 ;
} // fine funzione main
void Calcolo (IdVend) // inizio funzione popolamento matrice
{
int IdProd ; // Identificativo prodotto
int Venduto ; // venduto da prompt
printf ("Inserire l'ID del Prodotto :\n") ;
scanf ("%d", &IdProd ) ;
printf ("Inserire il dato del Venduto : \n") ;
scanf ("%d", &Venduto) ;
SaleS [IdProd][IdVend] = SaleS [IdProd][IdVend] + Venduto ; // popola la matrice alle coordinate indicate
printf ("%d\n", SaleS [IdProd][IdVend]) ; // stampa di controllo per la messa a punto
} // fine funzione Calcolo
void Stampa (void) { // inizio funzione Stampa risultati
int count ; // contatore per il primo ciclo for
int count2 ; // contatore per il secondo ciclo for
int prod = (PROD - 1) ;
int vend = (VEND - 1) ;
printf ("%d\n", SaleS [1][1] ) ;
printf ("\t\t%c\t\t%c\t\t%c\t\t%c\t\tTot\n", '1' , '2' , '3' , '4' ) ; //intestatione
for ( count = 1 ; count <= prod ; count++) { //inizia il ciclo for per la stampa delle righe
printf ("%d\t\t", count) ; // intestazione riga
for ( count2 = 1 ; count2 <= vend ; count2++ ) { // inizia il ciclo for per la stampa delle colonne
printf("%d\t\t", SaleS[count][count2] ) ; // stampa risultato prodotto/venditore
}
printf ("%d\n" , Totali (count, vend) ); // stampa invocando Totali il totale per la riga(prodotto)
}
printf (" \t\t") ; //stampa un campo vuoto
for (count = 1 ; count <= vend ; count++) { // ciclo for per la stampa dei totali per colonne (venditore)
printf ("%d\t\t", Totali (count, prod)) ;
}
printf ("\n") ; // manda a capo
} // fine funzione Stampa
int Totali ( x, y ) // inizio funzione calcolo dei totali invocati da stampa
{
int Sum = 0 ;
int count3 ;
for ( count3 = 0 ; count3 <= y ; count3++) { // inizio ciclo for calcolo totali da matrice
Sum = SaleS [x][count3] + Sum ;
}
return Sum ; // restituisce sum
} // fine funzione Totali
l'output è quello seguente :
omissis....
Inserire l'ID del Venditore : (EOF to End)
1
Inserire l'ID del Prodotto :
1
Inserire il dato del Venduto :
1
1
Inserire l'ID del Venditore: (EOF to End)
0 da calcolo
1
Inserire l'ID del Prodotto :
1
Inserire il dato del Venduto :
1
2
Inserire l'ID del Venditore: (EOF to End)
0 da calcolo
1
Inserire l'ID del Prodotto :
1
Inserire il dato del Venduto :
1
3
Inserire l'ID del Venditore: (EOF to End)
0 da calcolo
1
Inserire l'ID del Prodotto :
1
Inserire il dato del Venduto :
1
4
Inserire l'ID del Venditore: (EOF to End)
0 da calcolo
1
Inserire l'ID del Prodotto :
1
Inserire il dato del Venduto :
1
5
Inserire l'ID del Venditore: (EOF to End)
0 da calcolo
0 da main
0
1 2 3 4 Tot
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
0 0 0 0
Termine Programma
come potete vedere il valore del vettore viene conservato all'interno della funzione calcolo, ma rimane a 0 sia in main che nelle altre funzioni.
Purtroppo nn riesco a capire dove stia l'errore, considerando che non è la prima volta che scrivo un programma che dichiara un vettore con visibilità su tutto il file.
qualcuno ha la pazienza di spiegarmi dove sbaglio?
Vi ringrazio