C 为什么删除单个字符会留下空白?

C 为什么删除单个字符会留下空白?,c,tabs,C,Tabs,我试图用减法替换字符。它可以工作,但使用此方法会留下一个空白: #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); } } #包括 内部主(空){ INTC; 而((c=getchar(

我试图用减法替换字符。它可以工作,但使用此方法会留下一个空白:

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

}
#包括
内部主(空){
INTC;
而((c=getchar())!=EOF){
如果(c=='\t')
putchar('t');
如果(c=='\t')
c=c-'\t';
普查尔(c);
}
}
正是减法产生了不需要的输出,我不知道为什么

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

输出: 你好,塔伯特,塔伯特,塔伯特

目标是Hello tabttabtab

空白是打印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);

如果您收到不需要的输出,请在您的帖子中包含一些您正在提供/获得的输入和输出示例。您希望用什么替换该字符?为什么你认为减法是一种方法呢?请提供一些能正确编译和缩进代码的东西。你想实现什么还不太清楚。是否要编写带制表符的字符串的转义表示形式?无论如何,
'\t'-'\t'
是零或空字符,它不是可打印字符。您的控制台可能会打印空白。@Keon欢迎使用堆栈溢出!请用你的代码应该做什么来更新你的问题。也许,使用示例输入和预期输出进行更新可能会有所帮助。