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