t中考虑了多少个空格
how many spaces are considered in
为什么情况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
- 2D数组来自文本输入,中间有空格
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 如何在c++中使用system()来运行包含空格的python脚本
- basic_string的前导/尾部不区分空格的特征
- 移除前面有空格的前2个字符串
- 在条件变量中触发错误信号的频率是多少
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 函数的时间复杂度是多少?
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 从 stdio 获取一行空格分隔的整数,而不知道它们是多少 (C++)
- t中考虑了多少个空格