dobra
rozwiązanie jest dość proste ;]
musisz dać unsigned char zamiast char w dwóch miejscach 
struct tab
{
unsigned char zn;
int ile;
};
oraz
unsigned char zn;
no i jeszcze zamiast
while((zn = getchar()) != EOF)
dajesz
while(scanf("%c",&zn)!= EOF)
i program powinien przejść 