t中考虑了多少个空格

how many spaces are considered in

本文关键字:多少 空格      更新时间:2023-10-16

为什么情况3中的空间数不同字符如何影响结果。

(-)通过(\t)表示空间

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

这里的输出是>hello2-7

case 2
 void main()
    {
        int a,b;
        printf("%d",printf("hellot%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为什么在第三种情况下有8个空格。

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

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

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

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

在上面,必须先准备左侧printf参数,然后才能打印任何内容,这些参数包括调用右侧printf的结果。右侧的printf输出hello,即从标准输入读取的参数scanf的数量,如果您键入两个,则为2,然后是选项卡,然后右侧的printf已完成输出,并返回"7"以指示它打印了多少字符,这是由左侧的printf打印的。我希望有一个标签带你进入屏幕上的第9列,它建议在7之前有两个空格,正如你的问题所说,你在观察1。很明显,您的终端工作方式有点不同,可能考虑到第8、第16、第24等列是制表位。

有关选项卡的详细信息

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

一些显示/打印/格式化程序会认为每N个字符就有一个制表符,其中N通常是8,因此,如果您从第一列到第八列发出制表符,则会被带到第九列,从第九列到第十六列发出制表符号,则会将您带到第十七列等。但是,许多程序都有办法设置任意列的制表符位置。像MS Word这样的一些程序可以使用可变宽度字体,制表位之间的字符数会有所不同:如果C++程序打印一些导入到Word中的文本,你可能会发现实际上不可能计算出需要多少制表位才能获得所需的输出对齐方式-通常只需在值之间放置一个制表位,然后在Word中更改制表位一切看起来都不错,或者坚持使用固定宽度的字体,如Courier。

C++IDE通常允许您为每个制表位的列设置值(上面的"N")-4和8都是常见的设置,其中8通常意味着您的源代码缩进是制表符和空格的混合,以达到所需的左侧列:使用简单的光标移动实现导航有点混乱。许多人更喜欢设置"按下制表符时插入空格"选项,这样文件总是与实际空格一起保存,并使用各种显示/打印软件进行更可预测的显示。

一个TAB在渲染时只有给定的空间(实际上,任何字符也是如此);然而,选项卡的一个细微区别是,它们通常被认为意味着前进到下一个"虚拟列"(我相信还有一个更好的术语),这些虚拟列有8个字符宽;尽管该宽度经常可以改变。

这是一个丑陋的图形,其中n..-表示"虚拟列",T..t表示选项卡"占用"的空间:

1------2------3-------你好世界\这个世界你好

在C99和C11中,

\t(水平制表符)将活动位置移动到下一个水平位置当前行的制表位置。如果激活位置处于或超过最后定义的水平制表位置,行为未指定显示设备的。

而C++03和C++11没有指定'\t'与C.的差异

t不包含任何空格。t是一个合适的字符,可以用不同的长度显示,但它只是一个字符。

根据编译器和计算机软件的宽度将改变4位或8位例如:以下是使用编译器gcc 6.3编译器在windows 10 pro上编译的c程序,其中宽度为4位,

#include <stdio.h>
int main(void) {
printf("a12345678patiln");
printf("atpattil");
}

输出:

a12345678patil
a   pat il