Q:

C - Why substracting single characters leave a blank?

I tried to replace characters with substraction. It works but it leaves a blank with this method:
#include <stdio.h>

int main(void) {

int c;

while((c = getchar()) != EOF) {
    if (c == '\t')
        putchar('t');
    if(c == '\t')
        c = c - '\t';
    putchar(c);
}

}

Its the substraction that gives the unwanted output and I couldn't figure out why.
Example input:
Hello tab       tab       tab
Output:
Hello tabt tabt tab
Goal is Hello tabttabttab. 

A:

The "blank" is the result of printing NUL (0) character. Whenever you input '\t', you are printing NUL, which is not a printable character. 
if(c == '\t')     
    c = c - '\t';
putchar(c); // same as putchar(0); if c == '\t'

Perhaps, you wanted to replace tabs with -:
if(c == '\t')     
    c = '-';
putchar(c);

