Для начала массивы переменной длины
void rotate(int arr[],int d, int n){
int temp[d];
//...
не является стандартной функцией C ++. Либо используйте вспомогательный стандартный контейнер, например, std :: vector или std :: list, либо вы должны динамически распределять массив.
В последнем l oop функции
void rotate(int arr[],int d, int n){
int temp[d];
for(int i =0;i<d;i++){
temp[i]=arr[i];
}
for(int i = 0;i<n-d;i++){
arr[i] = arr[i+d];
}
for(int i =0 ;i < d;i++)
{
temp[i]= arr[n-d+i];
}
}
вы переписываете массив temp вместо массива arr.
И в функции printArray в этом выражении
cout<<arr[i]+" " ;
в выражении
arr[i]+" "
есть использовал указатель арифмети c. То есть строковый литерал " "
неявно преобразуется в указатель на его первый элемент, а число c значение arr[i]
используется в качестве смещения для этого указателя. Вместо этого напишите
cout<<arr[i] << " " ;