c语言中的%4d是什么意思?

Python026

c语言中的%4d是什么意思?,第1张

%4d用在printf()里面,表示在当前光标所在位置以“右对齐”的方式输出int类型的整数,占四个字符宽度

比如整数123,printf()输出的是三个字符'1','2','3',一个字符占一个字符宽度

123只占了三个字符宽度,那么第1个字符宽度就是空格符,空格符在屏幕上你是看不到的,输出后,光标是在字符'3'后面。如果加\n换行符,光标就在下一行的起始位置。

如果是12345,超过了四个字符宽度,就从光标所在位置完整输出并向后再占一个字符宽度。输出后,光标在字符'5'后面。

%-4d,就是以“左对齐”的方式输出。123的第四个字符宽度就是空格符,输出后光标是在空格符后面。

其它情况可以类推,比如%5d,%6d,%-5d,%-6d............%5f,%-5f......

如果用在scanf()里,%4d表示读取的最大字符宽度,也就是你输入了五位数,最多读取前四位。如果是两位数接着是空白符(空格符,制表符,换行符等),读取的就是两位数。

在scanf()里不要使用%-4d,因为会发生意想不到的错误,读取的数据和当前缓冲区里的字符流有关。

这些是用于格式化输出语句中的格式化字符串。

C语言的格式化输出语句包括printf, sprintf, wsprintf, vsprintf, vprintf, fprintf等,在这类函数调用时,都会传一个格式化字符串,其中可以包含各种格式化字符。每种对应一类变量类型。

%d对应整型(int),即当格式化字符串中出现了%d时,后续的参数对应位置应为int型变量,如果不是,将会强制转换为int型。

于是%d的功能就是输出一个整型的数值。

%nd的形式,其中n为一个数字,比如%4d,%5d等,代表输出占用n个字节的空间。

当实际输出数字需要的空间大于n时,以实际空间为准。否则输出n个字节空间,不足部分用空格在左侧补齐。

比如

printf("%4d", 12)

会输出

  12

即先输出两个空格,再输出12。

而如果是printf("%4d", 12345)

由于12345占五位,超过了4的限制,所以会输出本身值12345,没有任何空格填补。

%-4d是用于C语言输出的格式字符串,可以用于printf类函数,包括printf, sprintf, fprintf,vfprintf,vprintf,vsprintf,snprintf,vsnprintf,vasprintf等等。

各种函数中的含义是相同的,都是按照10进制形式输出整数值,输出值范围如果不足4列宽度,那么按4列宽度输出,否则按实际宽度输出。 输出结果数值在左侧,右侧用空格补足。

%-4d的四个字符每个都有各自的功能,具体如下:

1 %:格式字符串的引导标识,每个格式字符串必须以%开头。

2 -: 输出的内容左侧为有效数据,右侧为补足字符。

3 4:输出占4列宽度,不足用空格补齐,超出按实际长度输出。

4 d: 按照10进制整型输出。

下面这个例子输出两行数据,每行五个数值:

#include <stdio.h>

int main()

{

printf("%-4d%-4d%-4d%-4d%-4d\n",1,12,123,123412,12345)

printf("%-4d%-4d%-4d%-4d%-4d\n",23,123,2341,1,123456)

return 0

}

输出结果为

1   12  123 12341212345

23  123 23411   123456

从中可以看到其作用及缺陷。

对于低于4位的整数,可以很好的实现输出及对齐效果,比如例子中的第一列和第二列。

如果输出位数为4位,那么输出值和下一个输出间不会有分隔符,比如第二行的3 4两列,本来是2341和1,但输出的效果是一个数23411。

当数值超过4位时对齐效果会被打乱,同时与下一个输出见没有间隔。

比如第一行的第四列,输出数值为123412,与下一个12345没有分隔,同时第五列的12345本应与第二行的123456左对齐,但由于123412侵占了该位置,导致二者无法达成对齐效果。

所以%-4d这类格式输出,仅使用与数据规模在四位数以下的情况,超出则会出错。

如果在数据中存在负值,则负值仅可以为三位数或以下,因为输出的符号也同样会占一列宽度。