Dunque subito salta all'occhio che non inizializzi gli array. Male, male.
Nella funzione di copia dell' array di fatto non copi proprio niente. Penso che tu abbia sbagliato il for: attualmente farà al piu' una copia, dato che il controllo successivo causerà il ritorno dalla funzione (che rand sia 0 o 1).
Lo srand di solito va fatto una sola volta. Spostalo nel main.
Con questo codice a me funziona. Dopo alcuni nack per i vari pacchetti, tutti e 4 vengono "spediti"
codice:#include <stdio.h> #include <windows.h> #include <time.h> #include <stdlib.h> int destinatario(int pac[],int *conf){ int ricevuti[4],j; for(j=0;j<4;j++){ ricevuti[j]=pac[j];//copio l'intero array in un altro } *conf=rand()%2;//genero numero casuale e ritorno a mittente if(*conf==1) return 1; else return 0; } void mittente(){ int pacchetti[4]/*array pacchetti*/,i; int conferma,risp; for(i=0;i<4;i++){ printf("\n\nSpedizione pacchetto numero %d\n",i+1); conferma=destinatario(pacchetti,&risp);//invio l'array a destinatario if(conferma==1){// condizioni per proseguire col prossino elemento oppure rinvio dello stesso. printf("\nAck ricevuto\n"); } else{ printf("\nNack ricevuto\n"); i--;//qui decremento l'indice per la rispedizione del pacchetto } } } int main(){ srand(time(NULL)); printf("********************** SIMULAZIONE**********************\n"); printf("\n\nInizio spedizione pacchetti........\n"); mittente();//invoco la funzione printf("\n********************** TERMINAZIONE SIMULAZIONE**********************\n"); }
Ho tolto gli Sleep perchè non ce la facevo ad aspettare 30 anni per ogni output

Rispondi quotando