gpt4 book ai didi

c++ -\t 考虑了多少个空格

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:09 25 4
gpt4 key购买 nike

为什么情况3的空格数不一样\t 字符如何影响结果。

(-) 通过 (\t) 引用空格

case 1
void main()
{
int a,b;
printf("%d",printf("hello%d\t",scanf("%d%d",&a,&b)));
}

这里的输出是>hello2-7

case 2
void main()
{
int a,b;
printf("%d",printf("hello\t%d",scanf("%d%d",&a,&b)));
}

这里的输出是>hello-27

case 3
void main()
{
int a,b;
printf("%d",printf("\thello%d",scanf("%d%d",&a,&b)));
}

这里的输出是>--------hello27为什么在第 3 种情况下有 8 个空格。

最佳答案

大多数终端程序将在每第 8 列有一个制表位 - 所以我希望输出是这样确定的(我知道你的输出有点不同 - 在下面讨论):

.                                column
. 1 2
input 12345678901234567890
"%d",printf("hello%d\t" hello2__7
"%d",printf("hello\t%d" hello___27
"%d",printf("\thello%d" ________hello27

要理解这一点,您必须了解(不必要的复杂)代码的求值顺序。检查第一个 printf 行...

printf("%d",printf("hello%d\t",scanf("%d%d",&a,&b)));

上面,left-hand printfarguments 必须在它自己打印任何东西之前准备好,这些参数包括调用 right-hand printf 的结果。右边的 printf 输出 helloscanf 从标准输入读取的参数数量,如果你键入两个,则为 2,然后是制表符,则右边的printf输出完毕,返回“7”表示打印了多少个字符,左边的printf打印出来了。我希望有一个选项卡将您带到屏幕上的第 9 列,这表明在 7 之前有两个空格,正如您的问题所说,您正在观察 1。显然您的终端工作方式有点不同,可能考虑到第 8、16,第 24 等列为制表位。

关于选项卡的更多信息

没有对 \t TAB 字符的通用解释...它的呈现方式取决于您使用的终端软件或呈现设备(例如 xterm、vt220、vt100 终端、MS -DOS 命令窗口、打印机、IDE、文本编辑器等)。

一些显示/打印/格式化程序会考虑每 N 个字符有一个制表位,其中 N 通常是 8,这样如果你从第一列到第 8 列发出一个制表符,你就会被带到9th,从第 9 列到第 16 列的选项卡将带您到第 17 列等等。但是,许多程序将有办法为选项卡放置设置任意列。某些程序(如 MS Word)可以使用可变宽度字体,制表位之间的字符数会发生变化:如果您的 C++ 程序打印一些您导入到 Word 中的文本,您可能会发现实际上无法计算出需要多少个制表符才能得到所需的输出对齐方式 - 通常更容易在值之间放置一个制表符并更改 Word 中的制表位以使其看起来一切正常,或者坚持使用固定宽度的字体,例如 Courier。

C++ IDE 通常允许您为每个制表位的列设置值(上面的“N”)- 4 和 8 都是常见设置,8 通常意味着您的源代码缩进是制表符和空格的混合,以达到所需左栏:使用天真的光标移动实现进行导航有点困惑。许多人更喜欢设置“按下 Tab 键时插入空格”选项,以便文件始终使用实际空格保存,并在各种显示/打印软件中更可预测地显示。

关于c++ -\t 考虑了多少个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com