Ciao a tutti,
sono alle prime armi con RPC e non riesco a capire il perche' della stampa di una printf![]()
vi posto il codice:
Allora la procedura inizializza....ha il compito di inizializzare le strutture dati al primo avvio....queste sono due Candidati e Liste;codice:static int inizial = 0; static Candidati candidati; static Liste elencoliste; void inizializza() { int i; if(inizial == 1) { printf("\n\n\n inizializ vale %i", inizial); return; } else { for(i = 0; i< N; i++) { printf("\n inizia la procedura di preparazione di candidati..."); candidati.candidato[i].nome[0] = '\0'; candidati.candidato[i].nome_lista[0] = '\0'; candidati.candidato[i].value = 0; printf("inizializzato candidato %i", i); } for(i = 0; i< N; i++) { elencoliste.liste[i].lista[0] = '\0'; elencoliste.liste[i].coalizione[0] ='\0'; printf("\ninizializzato candidato %i", i); } printf("\nRiempimento struttura liste e check inizializzazzione....."); strcpy(elencoliste.liste[0].lista,"nulla"); strcpy(elencoliste.liste[0].coalizione,"nulla"); strcpy(elencoliste.liste[1].lista,"cataldi"); strcpy(elencoliste.liste[1].coalizione,"cater bruno"); strcpy(elencoliste.liste[2].lista,"valer"); strcpy(elencoliste.liste[2].coalizione,"rita d-avorio"); strcpy(elencoliste.liste[3].lista,"aldi"); strcpy(elencoliste.liste[3].coalizione,"poiater rino"); for(i = 0; i< N; i++) { printf("elencoListe %i esimo: %s e %s", i, elencoliste.liste[i].lista, elencoliste.liste[i].coalizione); } inizial= 1; printf("\nValore di inizial posto ad %i", inizial); } } //funzione per la richiesta totale dei voti... int * visualizzazzione_voti_lista_1_svc(Input *name, struct svc_req * rqstp) { int i; int valore = 0; static int result = -1; printf("\nSono qui....nome lista richiesta:%s", name->lista); // questa printf stampa il nome lista passato // nella precedente chiamata inizializza(); printf("\nSono qui....nome lista richiesta:%s", name->lista); // questo stampa quello attuale for(i = 0; i<N; i++) { if(strcmp(name->lista, elencoliste.liste[i].lista)== 0) { valore = 0; break; } valore = -1; } if(valore < 0 ) // non esiste la lista return (&result); for( i = 0; i<N; i++) { if(strcmp(name->lista, candidati.candidato[i].nome_lista)== 0) { result += candidati.candidato[i].value; } } return (&result); }
Nella funzione int * visualizzazzione_voti_lista_1_svc(Input *name, struct svc_req * rqstp) viene richiamata sempre inizializza che tramite una variabile statica ....sa se devono essere inizializzate le due strutture, se la variabile assume il valore 1 significa che inizializza e' gia stata eseguita...e quindi ritornera' semplicemente senza fare nulla.....
La chiamata di nella funzione ha una printf() prima e una printf() dopo.... per stampare il valore passato alla procedura
remota sia dopo e che prima della chiamata di inizializza......
non capisco perche' le due printf stampano differenti valori.....eppute di static non ce nulla?codice:printf("\nSono qui....nome lista richiesta:%s", name->lista); // questa printf stampa il nome lista passato // nella precedente chiamata inizializza(); printf("\nSono qui....nome lista richiesta:%s", name->lista); // questo stampa quello attuale
Qualcuno sa spiegarmi il perche'???????????????![]()
![]()
![]()
![]()
![]()
![]()
![]()

Rispondi quotando