printf()函数中\t,水平制表符,空格的个数

在控制台输出数据的时候,也就是用printf()的时候,我们经常用\t来控制对齐,以使输出的结果更加整齐美观。

然而有时候我们发现及时使用了\t 也会出现数据对不齐的情况,这就跟\t究竟对应几个空格有关系。

先给出程序和运行结果,再进行解释。

代码:

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv)
{

    printf("123456\t123\t45\n");
    printf("12\t123456\t78\n");
    printf("---------------------------------------\n");
    printf("1234567\t123\t45\n");
    printf("12\t123456\t78\n");
    printf("---------------------------------------\n");
    printf("12345678\t123\t45\n");
    printf("12\t123456\t78\n");
    printf("---------------------------------------\n");
    printf("123456789\t123\t45\n");
    printf("12\t123456\t78\n");
    printf("---------------------------------------\n");
    printf("123456781234\t123\t45\n");
    printf("12\t123456\t78\n");

    return 0;
}

运行结果:

可以看到,出现了数据不能对其的情况。我们发现\t对应的空格的次数是不固定的,并不是我们所认为的4个空格或8个空格。

那么有什么规律呢。给个简单的公式  :

令  num = |n-8|%8, 其中n表示\t前面的字符占的位置(前面的字符也可能是转换说明,如%d,%10d等)。

那么\t对应的空格的个数 spaceNum,有

所以我们看到当\t前面为123456时,后面有两个空格;当\t前面为1234567时,后面有1个空格,而当前面正好为12345678时,后面跟8个空格

当前面为123456781234时,后面的空格数量为  |12-8|%8=4

时间: 2025-01-05 15:03:49

printf()函数中\t,水平制表符,空格的个数的相关文章

printf()函数的参数和制表符

· 参数 · 控制符 · 转义序列 printf("这是第们学习的第4课"); printf("12345\n6789"); \n  换行 \r  回车键 \b  退后一格 \f  换页 \t  水平制表符 \v  垂直制作表 \a  内置小喇叭鸣响 \?  插入问号 \"  插入" \'  插入' \\  插入\

c语言中printf()函数中的参数计算顺序

今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include<stdio.h> int main() { printf("%d---%d---%d",printf("ab"),printf("c"),printf("eee")); } 输出结果为: 这说明printf()函数在计算的时候顺序是从右往左的,但最后输出的顺序是从左往右的.所以遇到类似题目时,应该根据运算顺序和输出顺序灵活判断

printf函数中%p代表什么数据类型

今天在问答频道看到网友问%p输出的是什么,查了查在这里做个记录 <span style="font-size:18px;">#include <stdio.h> void main(){ int arr[5] = {10,20,30,40,50}; int i = 0; printf("数据:\n"); printf("十进制表示的数据:\n"); for(i = 0 ; i < 5 ; i++){ printf(&

Java中水平制表符

在字符界面中,水平制表符表示紧跟后面的文字在往右一个表格位置显示或输出, 通常一个表格位置占8个字符宽度,也就是相当于是把整个屏幕分成每8个字符为一个单元格大小, 下一个表格位置是在下一个8的整倍数字符数的位置,使用水平制表符可以可以使文字内容在规整的位置显示或输出而看起来清晰整齐.如: 员工的信息如下: Number    Name    Age    Salary 1   汪XX       23      10000.50 2      陈XX       23      15000.50

scanf,printf函数细节

今天笔试的时候遇到一个考察C语言scanf函数的题目 int x; float y; scanf("%3d%f",&x,&y); // input 123456 678 enter and then what's the value of x and y printf("%d %f",x,y); 程序的执行结果是: 123 456.0000000 看来还是自己对scanf函数不是很了解,现在看看scanf函数的描述如下: 格式:既字符串序列,它控制从

C语言 -- printf函数参数类型和打印格式不匹配

C语言中,变量在运算或者赋值时会存在类型的自动转换.很一般的情况这里不再讨论,下面只说一下赋值和利用printf函数打印时的情况 1.赋值时的自动转换 int a = 1.5; printf("%d", a); 输出值为1  因为1.5是一个double类型,但是在赋值为a时,由于a是一个int类型,所以将小数部分舍去,a为1 2.printf函数中不涉及自动转换 他只按照固定的格式打印,如果解析失败,就输出对应格式下的0 例如: int a = 1; printf("%f&

printf 函数

上一篇以 hello world 程序开始,hello world 程序核心主体只有一句话: printf("Hello world!"); 如果需要输出一些变量,可以使用 "%d", "%s", "%c" 等,传入对应变量输出. int main() { int i = 10; char *s = "Kylin"; char c ='u'; printf("Hello world, %d, %s

C语言中的printf函数的输入输出问题

这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了. 这里要注意的是,printf函数是从右向左计算,从左向右输出. 距离如下: #include <stdio.h> main() { int i=8; printf%d, %d, %d, %d\n",i,--i,i,i--); } 此程序输出结果为:7, 7, 8, 8.原因是,printf()函数中,i++,i-- 时,i的值是在printf()函数之后才会被刷新,所以在printf()函数中,i++,i

scanf和printf函数的返回值

<span style="font-size:24px;color:#000099;"> scanf函数返回的是输入值的个数 而printf函数则是返回打印字符的个数 特别注意的是 \t 也只是表示的是一个字符<img src="http://img.blog.csdn.net/20150422143816136?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTc1MzA5OTk0Mw==/font/5a