在 printf 函数中被制表符 (\t) 混淆
confused by tab (\t) in printf function
考虑这个例子:
#include <stdio.h>
int main() {
int fahr, celsius;
int lower, upper, step;
lower = 0; upper = 300; step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr += step;
}
return 0;
}
并得到这样的输出:
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
既然'\t'代表四个空格,为什么输出这么整齐?看起来下面的输出格式是按照第一个的。感谢您的帮助!
since '\t' represent four white spaces ...
嗯,那是错误的。 Tab (\t
) 不是四个空格(或任何其他固定数量的空格)。
相反,它的意思是:移动到下一个制表位。
制表位之间的距离是固定的。所以打印 \t
会将光标移动到可以写成 N * Tab-size
.
的位置
但请注意,制表符大小可能因终端而异。通常它是 4 或 8,但也可以是其他值。
制表符大小等于 4 的示例:
Current position Next tab-stop (i.e. new position after printing \t)
0 4
1 4
2 4
3 4
4 8
5 8
6 8
7 8
8 12
等等。
在您的情况下,只要打印 fahr
需要 3 个(或更少)字符,celsius
将始终打印在位置 4。
但是,如果打印 fahr
需要 4 个字符,您会看到 celsius
被打印在位置 8。
将 upper
更改为 1200 并将 step
更改为 200 将得到:
0 -17
200 93
400 204
600 315
800 426
1000 537
1200 648
前 5 行 celsius
打印在位置 4,因为打印 fahr
需要少于 4 个字符,因此 next 制表位是在位置 4.
最后两行 celsius
打印在位置 8,因为打印 fahr
需要 4 个字符,因此 next 制表位位于位置8.
/t
本身就是一个字符。你不能把它和空格混在一起。就像其他角色一样。它也有一个 ASCII 代码 (09),就像其他代码一样。
考虑这个例子:
#include <stdio.h>
int main() {
int fahr, celsius;
int lower, upper, step;
lower = 0; upper = 300; step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr += step;
}
return 0;
}
并得到这样的输出:
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
既然'\t'代表四个空格,为什么输出这么整齐?看起来下面的输出格式是按照第一个的。感谢您的帮助!
since '\t' represent four white spaces ...
嗯,那是错误的。 Tab (\t
) 不是四个空格(或任何其他固定数量的空格)。
相反,它的意思是:移动到下一个制表位。
制表位之间的距离是固定的。所以打印 \t
会将光标移动到可以写成 N * Tab-size
.
但请注意,制表符大小可能因终端而异。通常它是 4 或 8,但也可以是其他值。
制表符大小等于 4 的示例:
Current position Next tab-stop (i.e. new position after printing \t)
0 4
1 4
2 4
3 4
4 8
5 8
6 8
7 8
8 12
等等。
在您的情况下,只要打印 fahr
需要 3 个(或更少)字符,celsius
将始终打印在位置 4。
但是,如果打印 fahr
需要 4 个字符,您会看到 celsius
被打印在位置 8。
将 upper
更改为 1200 并将 step
更改为 200 将得到:
0 -17
200 93
400 204
600 315
800 426
1000 537
1200 648
前 5 行 celsius
打印在位置 4,因为打印 fahr
需要少于 4 个字符,因此 next 制表位是在位置 4.
最后两行 celsius
打印在位置 8,因为打印 fahr
需要 4 个字符,因此 next 制表位位于位置8.
/t
本身就是一个字符。你不能把它和空格混在一起。就像其他角色一样。它也有一个 ASCII 代码 (09),就像其他代码一样。