Wypisuje słowo, tylko ono składa się z białych znaków, bo znak nowej linii po pierwszym scanf (tym z %d) odczytuje scanf z pętli, getchar odczytuje wpisany znak, potem znowu scanf biały znak i getchar wpisany znak itd. Możesz dodać jeszcze getchar pod pierwszym scanf, albo całkiem wywalić te getchary (i wczytywac od razu do tablicy, bo to wczytywanie najpierw do zmiennej znak jest niepotrzebne) i w scanf dać spację, czyli
scanf(" %c",&tab[i]);
Dzięki tej spacji białe znaki zostaną pominięte, scanf ich nie wczyta do zmiennej. Po co przypisywać do k 0 jak i tak później wczytujesz do niego wartość przez scanf.
#include <stdio.h>
int main(){
int k, i=0;
printf("ile liter liczy slowo ? \n");
scanf("%d",&k);
char tab[k];
printf("napisz to slowo \n");
while (i<k) {
scanf(" %c",&tab[i]);
i=i+1;
}
printf("slowo od konca brzmi \n");
i=k-1;
while(i>=0) {
printf("%c ",tab[i]);
i=i-1;
}
return 0;
}