C语言 转义字符的异常行为

bqucvtff  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(148)

我从这段代码中得到了一个意外的输出。

int main() {

    int var;
    

    while ((var = getchar() ) != '\n') {
        if (var == '\t')
            printf("\\t");
        if (var == '\b')
            printf("\\b");
        if (var == '\\')
            printf("\\");

        putchar(var);       }
    
    putchar('\n');
}

当我传入以下输入时,我得到的输出如下:

Input:Hello   World
Output:Hello\t World

根据我的理解,输出应该是Hello\tWorld。另外,对于输入:

Input:HelloW  orld
Output:HelloW\t      orld

Input:Hello\World
Output:Hello\\World

结果不应该是,Hello\World,为什么有一定的空格?这是编译器的问题吗?我使用的是,gcc(Debian 10.2.1-6)10.2.1 20210110此外,我注意到当我连续按tab键时,我的终端留下了不连贯的空格数。示例:第一次按的时候间隔是3,第二次按的时候间隔是8,虽然我不认为这和这个有什么关系。

9lowa7mx

9lowa7mx1#

问题是你总是打印你读到的字符,即使它是一个转义字符。
因此,如果输入一个制表符,则打印\t,后面跟着实际的制表符。
要么更改为if .. else if ... else链,要么使用switch语句:

switch (var)
{
case '\t':
    printf("\\t");
    break;

// Same for the other special characters...

default:
    // Any other character
    if (isprint(var))
        putchar(var);
    break;
}

相关问题