我从这段代码中得到了一个意外的输出。
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,虽然我不认为这和这个有什么关系。
1条答案
按热度按时间9lowa7mx1#
问题是你总是打印你读到的字符,即使它是一个转义字符。
因此,如果输入一个制表符,则打印
\t
,后面跟着实际的制表符。要么更改为
if .. else if ... else
链,要么使用switch
语句: