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

时间:2016-01-03 10:18:57

标签: 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);
}

}

它的减法产生了不必要的输出,我无法弄清楚原因。

示例输入: Hello选项卡标签选项卡

输出: 你好tabt tabt标签

目标是Hello tabttabttab。

1 个答案:

答案 0 :(得分:0)

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