我正在for循环中执行printf("\t%d", i)
,以打印表的列标签。
在循环之前,我执行printf("some string ===>")
。
我注意到的一个问题是,例如,如果我执行printf("some string===>"
(少一个字符),循环中的第一个选项卡在我的Ubuntu 20.04终端中不能正确显示。
这是为什么呢?
#include <stdio.h>
int main()
{
printf("some string ===>");
for (int j = 1; j <= 9; ++j) printf("\t%d", j);
printf("\n");
printf("some string===>");
for (int j = 1; j <= 9; ++j) printf("\t%d", j);
printf("\n");
}
在我的Ubuntu 20.04终端
中输出
2条答案
按热度按时间5cg8jx4n1#
Tab字符表示“移动到下一个制表位”,其中制表位通常每隔8个字符。
考虑以下程序:
在我的计算机上(带有8个字符的制表位),它将打印:
字符串
"some string ===>"
的长度为16个字符,因此打印后,字符串长度为8的倍数,因此打印TAB键会将8个空格移动到下一个8的倍数(24)。字符串
"some string===>"
的长度为15个字符,因此打印后,还差一个8的倍数,因此打印TAB键时,会多移动1个空格,即16个字符。vh0rcniy2#
使用宽度字段来对齐列,而不是使用制表符。
%-20s
将使文本在20个字符宽的字段中左对齐。%5d
将在5个字符宽的字段中右对齐文本。如果文本的长度大于指定的宽度,则字段将扩展以容纳文本。