Se dim vale 4, è normale che te ne stampa 4.
Il problema sarà sicuramente la pulitura del buffer, ecco perché ti chiede 5 valori anziché 4.
Pulisci il buffer di input:

codice:
printf("Inserisci un numero:\n");
    for(i=0; i<dim-1; i++){
        scanf("%d ", (p+i));
        while(getchar()!=10)
            ;
    }