【问题标题】:What happens when \t meets \b in C?当 \t 在 C 中遇到 \b 时会发生什么?
【发布时间】:2017-03-12 00:46:46
【问题描述】:

我知道\t\b 是什么意思。
但是当\b\t 之后会发生什么,以及当多个\b\t 组合时会发生什么。
看这段代码,里面包含了\t\b的多种组合:

printf("1\t1\t1\t1\n");
printf("---------------------------\n");
printf("1\t2\b\b3\n");
printf("\t\b1\n");

我明白了:

1       1       1       1
---------------------------
1      32
1

两个\b 显示不同。
结果令人困惑,以我现有的知识根本无法解释。
不知道到底\t\b怎么理解。

【问题讨论】:

  • 你首先需要知道你的正确输出应该是什么样子
  • @artm 感谢您的回复。但我现在不知道什么是。输出让我很困惑。
  • 您还需要描述stdout实际上是什么设备。例如,它是否被重定向到一个文件,如果是,如何查看输出?假设它没有被重定向,那么正在使用什么显示设备?不同的设备(和设备驱动程序)以不同的方式处理制表符,甚至退格(例如,如果行上的第一个字符)可以以不同的方式处理。还有一些设置会影响标签。
  • @Peter 谢谢。在相同的环境下,我无法解释输出。这里我使用 Windows Clang 编译器,CLion 控制台显示结果。
  • 这真的与C无关。如果你只是将相同的数据直接复制到终端,你会得到相同的结果。

标签: c printf non-printable non-printing-characters


【解决方案1】:

printf("\b") 将退格字符发送到标准输出。 printf("\t") 将制表符发送到标准输出。从那里到环境会发生什么;您的程序无法真正控制它。

在典型的交互式输出设备上,退格键会将光标向左移动一列(不删除任何内容),而制表符会将光标移动到下一个制表位(也不删除任何内容)。这应该可以解释您所看到的。

(实际上我得到的输出与您向我们展示的不同,这让我认为您使用的终端有什么不同,或者您的输出转录不正确。)

【讨论】:

  • 我知道,不同的终端显示不同。但是在一个终端中,行为是不一致的。这就是我感到困惑的地方。
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多