C - 为什么减去单个字符会留下空白?

C - Why substracting single characters leave a blank?

我尝试用减法替换字符。它有效,但使用此方法会留下空白:

#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);
}

}

减法给出了不需要的输出,我不明白为什么。

示例输入: 你好选项卡选项卡选项卡

输出: 你好 tabt tabt tab

目标是你好 tabttabttab。

"blank"是打印NUL(0)字符的结果。每当您输入 '\t' 时,您都在打印 NUL,这不是可打印的字符。

if(c == '\t')     
    c = c - '\t';
putchar(c); // same as putchar(0); if c == '\t'

也许,您想将制表符替换为 -:

if(c == '\t')     
    c = '-';
putchar(c);