c语言中百分号4d,printf, sprintf,输出数据类型(转)-程序员宅基地

技术标签: c语言中百分号4d  

字符的参数类型 ;输出形式

d,i int类型;显示一个带符号的十进制数(i和d用在scanf函数中时是不同的)。

o int类型;无符号八进制数(没有前导0)

x,X int类型;显示一个无符号的十六进制数,X可用来显示数字0~9和字母A~F,x可用来显示数字0~9和字母a~f 。

u int类型;无符号十进制数

c int类型;单个字符

s char *类型;顺序打印字符串中的字符,直到遇到'/0'或已打印了由精度指定的字符数为止。

f double类型;十进制小数[-]m.dddddd,其中d的个数由精度指定(默认值为6)

e,E double类型;[-]m.dddddde+/-xx或[-]m.ddddddE+/-xx,其中d的个数由精度指定(默认值为6)

g,G double类型;如果指数小于-4或大于等于精度,则用%e或%E格式输出,否则用%f格式输出。尾部的0和小数点不打印。

p void *类型;指针(取决于具体实现)

% 不转换参数;打印一个百分号% 字母h或l,字母h表示将整数作为short类型打印,字母l表示将整数作为long类型打印。

用于存放输出数据的宽度称为“域宽”。如果域宽大于被打印数据的宽度,数据通常会在域内右对齐。如果输出值的宽度大于域宽时,域宽是自动增长的。域宽通常插在百分号和转换说明符之间。

printf("M/n",123)

printf("M/n",1234)

printf("M/n",12345)

则输出结果为:

123

1234

12345

用printf函数也可以指定输出数据的精度。对於不同的数据类型,精度有不同的含意。

用于整数转换说明符,精度表示至少要输出的数字个数(如果被输出的数字个数小於只指定的精度,就在输出值前面加0)。

printf("%.4d/n",873)

printf("%.9d/n",873)

则输出结果为:

0873

000000873

sprintf(s, "X", 4567); 和sprintf(s,

"%.8X", 4567); 这两种写法是一样的。

printf( "%.8X", 4567);和printf( "X", 4567);这两种写法也是一样的

。X 和 %.8X

都表示将对应变量转换为16进制无符号数之后如果目标数字不满8位,则在其左侧补0以填满8位,然后输出。

用于浮点数转换说明符e、E、f,精度是小数点后面显示的数字个数。

printf("%.3f/n",123.45678)

printf("%.3e/n",123.45678)

则输出结果为:

123.456

1.235e+02

用于浮点数转换说明符g、G,精度是打印出的有效数字的最大个数。

printf("%.3g/n",123.45678)

则输出结果为:

123

用于字符串说明符s时,精度是被输出的字符的最大个数。

printf("%.11s/n","Happy birthday")

则输出结果为:

Happy birth

例如:

打印字符串“hello,

world”(12个字符,此处未包含/0)时根据不同的转换说明产生的不同结果。我们在每个字段的左边和右边加上冒号,这样可以清晰地表示出字段的宽度。

:%s: :hello, world:

:s: :hello, world:

:%.10s: :hello, wor:

:%-10s: :hello, world:

:%.15s: :hello, world:

:%-15s: :hello, world :

:.10s: : hello, wor:

:%-15.10s: :hello,

wor :

-(减号): 使输出在域宽中左对齐。

例1. 输出整数

#include

main( )

{

printf("%d/n",455);

printf("%i/n",455);

printf("%d/n",+455);

printf("%hd/n",32000);

printf("%ld/n",2000000000);

printf("%o/n",455);

printf("%u/n",455);

printf("%u/n",-455);

printf("%x/n",455);

printf("%X/n",455);

return 0;

}

上面的程序输出以下的结果

455

455

455

32000

2000000000

707

455

4294966841

1c7

1C7

printf("%u/n",-455);输出的是4294966841

-1 原码1000000000000001

-1补码 1111111111111111

-1变成无符号数是65535

-455变成无符号数输出65081,按长整型输出4294966841.

长整型-455的源码是

10000000 00000000 00000100 01010101

补码是

11111111 11111111 11111011 10101011

变成无符号数是2~31+2~30+2~29..........

同理:

unsigned short si = -1;

这句话 在赋值的时候发生隐式类型的转换。

如果没有截断、提升,那么 si 内存中的二进制内容和 -1 一样,但是会按照 unsigned short类型来 解释。这和

unsigned short si = 'a' 是一个道理。

因此只要你写下 -1 那么它就是个 signed,至于你赋值给 unsigned 或者 double,都不改变 -1 是 signed

这个事实。

但是编译器可能会发出警告。 可以用如下这种的方法来强行赋值:

unsigned short si = (unsigned short) -1;

结果为 si = 0xFFFF (65535)

printf("%d/n",+455);输出的是455

%d是有符号整型,但是输出时不输出正号,负数却输出负号。如果你想输出正号,那就在%e前面加一个正号,然后可以在前面加个条件判断。

例2. 输出浮点数

#include

main( )

{

printf("%e/n",1234567.89);

printf("%e/n",+1234567.89);

printf("%e/n",-1234567.89);

printf("%E/n",1234567.89);

printf("%f/n",1234567.89);

printf("%g/n",1234567.89);

printf("%G/n",1234567.89);

return 0;

}

上面的程序输出以下的结果

1.234568e+06

1.234568e+06

-1.234568e+06

1.234568E+06

1234567.890000

1.234567e+06

1.234567E+06

默认情况下,用转换说明符e、E、和f打印出的值带6个小数位。

例3. 输出域宽

#include

main( )

{

printf("M/n",1);

printf("M/n",12);

printf("M/n",123);

printf("M/n",1234);

printf("M/n/n",12345);

printf("M/n",-1);

printf("M/n",-12);

printf("M/n",-123);

printf("M/n",-1234);

printf("M/n",-12345);

return 0;

}

上面的程序输出以下的结果

1

12

123

1234

12345

-1

-12

-123

-1234

-12345

还可以用如下方法表示:

(例) printf("%*.*s/n",m,n,ch);

前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n。这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。

例如

printf("%*d",5,5) 等于 printf("]",5)

printf("%*d",9,3) 等于 printf("�",3)

函数sprintf执行的转换和函数printf相同,但它将输出保存到—个字符串中。

int sprintf(char *string, char *format, arg1, arg2, ...);

sprintf函数和printf函数一样,按照format格式格式化参数序列arg1、arg2、…,但它将输出结果存放到string中,而不是输出到标准输出中。当然,string必须足够大以存放输出结果。

1234/100如果变量是用int定义的,那就是12啊,因为是整型的,只保留整数部分

如果用float定义就可以得到小数部分了。

printf是标准输出流的输出函数,用来向标准输出设备输出;

fprintf则是向文件输出,将输出的内容输出到硬盘上的文件中 。

fprintf(fp,"%s",name); fp为文件指针。

fprintf(stdout,"%s",name); 和 printf("%s",name);

是完全一样的(前提是你的标准输出是指向显

示器,不过一般标准输出都是显示器)。

sprintf可以把整数打印到字符串中,在大多数场合中sprintf可以替代itoa。

例如:

sprintf(s, "%d", 123); 把整数123 打印成一个字符串保存在s中。

sprintf(s, "��", 123, 4567); 产生:" 123 4567" 可以指定宽度,不足的左边补空格。

sprintf(s, "%-8d�", 123, 4567); 产生:"123 4567" 其中123左对齐。

例如:

也可以按照16 进制打印如下。

sprintf(s, "%8x", 4567); 小写16

进制,宽度占8 个位置,右对齐。

sprintf(s, "%-8X", 4568); 大写16 进制,宽度占8 个位置,左对齐。

这样,一个整数的16 进制字符串就很容易得到。

在打印16 进制内容时想要得到左边补0 的等宽格式,那在表示宽度的数字前面加个0 就可以了。

例如:

sprintf(s, "X", 4567); 产生:"000011D7"

以“%d”进行的十进制打印同样可以使用这种左边补0 的方式来得到等宽格式。

sprintf(buff,"%s",name); buff为字符数组。将name输入到名为buff指向的字符串中。

sprintf能把一个int型按逐个字符转换成char型。

例如:

int a = 12345;

char s[10] = "";

sprintf(s,"%d",a);

可得 s[0]=1; s[1]=2; s[2]=3; s[3]=4; s[4]=5; 及转换成了char型。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30480281/article/details/117162525

智能推荐

特征描述子的理解(pfh,fpfh,short)_fpfh特征知乎-程序员宅基地

文章浏览阅读2.9k次。为什么要特征描述子?因为用点特征描述的(法线、曲率等)只能是用少部分的参数来代表一段几何区域,描述参数太少。所以通过参数化 查询点和领域点的空间差异 形成了特征描述子。PFH:该方法是使用 一对点 通过局部坐标系来建立对应的关系的(因为是一对点,所以具有一定的抗干扰性,比如抗旋转),但是对法线计算的准确性的依赖比较大。将(x,x,x)看作空间的点 ,最后做投票选择,最后在展开。(pcl 源码将f1,f2,f3归一化后放入直方图,好像还用到了哈希表存储。)这里注意的是它..._fpfh特征知乎

在vue项目中使用moment.js(时间格式化)_vue 使用moment时间格式化-程序员宅基地

文章浏览阅读589次。在vue项目中使用moment.js_vue 使用moment时间格式化

通过NFS挂载根文件系统_info: task swapper/0:1 blocked for more than 10 se-程序员宅基地

文章浏览阅读1.4k次。实验八通过NFS挂载根文件系统【实验目的】 掌握bootcmd、bootargs环境变量的设置和NFS挂载根文件系统的方法。 说明:在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行。【实验环境】1. Ubuntu 12.04 32位发行版2. FS6818平台【实验步骤】1. 将“案例源码\第一天\镜像文件\rootfs.tar.xz”拷贝至Ubu..._info: task swapper/0:1 blocked for more than 10 seconds.

java.net.sockttimeout,springboot+thrift超时 java.net.SocketTimeoutException: Read timed out-程序员宅基地

文章浏览阅读890次。报错信息如下:org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed outat org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)at org.apache...._springboot resttemplate java.net.sockettimeoutexception: read timed out

static_cast和reinterpret_cast_static_cast rep-程序员宅基地

文章浏览阅读500次。[cpp] view plaincopy static_cast和reinterpret_cast揭秘 收藏 本文讨论static_castreinterpret_cast reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最_static_cast rep

Hadoop之JDK配置_hadoop 2.7 使用jdk版本-程序员宅基地

文章浏览阅读1.5k次。Hadoop之JDK配置步骤总结:(1)下载,我的是jdk-8u181-linux-x64.tar.gz(2)放到某目录下(移动到某目录下命令:mv 某文件名 目录名),然后解压(tar -zxvf +压缩包名称)(3)环境变量配置,一般在 /etc/profile 或 ~/.bashrc文件下(4)使环境变量生效 source /etc/profile或 source ~/.bas..._hadoop 2.7 使用jdk版本

随便推点

python一帧一帧读取视频_python tools实现视频的每一帧提取并保存-程序员宅基地

文章浏览阅读263次。Preface最近在做 video caption 相关,要处理大量视频。Method 1方法 1 是最简单的,用 FFmpeg工具来完成。具体的网上有很多这方面的资料,本人只是简单了解了一下如何使用。如下图,有一个名为 ffmpeg_test.avi的视频:在当前目录打开终端,输入如下命令:$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_bann..._cap.read() 每隔一秒获取一帧

java 用户拒绝对代码授予权限,java.lang.SecurityException:权限拒绝:打开提供程序...-程序员宅基地

文章浏览阅读1.1k次。I start image picker intent using:final Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);startAct..._java.lang.securityexception: not allowed to access cell info

setTimeout循环:js异步机制问题_js 循环settimeout异步执行-程序员宅基地

文章浏览阅读295次。最近写前端时发现setTimeout和for循环相遇时,会发生一些特殊的情况,与预期的执行结果不符。for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 );}上述代码的执行结果为:6,6,6,6,6这似乎与预期的1,2,3,4,5结果不符。理想的执行步骤:但是实际的执行步骤:经过查阅资料,js存在同步和异步的执行机制,同步事件的优_js 循环settimeout异步执行

基于GDAL的遥感影像显示(C#版)_c#调用遥感图像处理库-程序员宅基地

文章浏览阅读1.8w次,点赞12次,收藏54次。接触GDAL有四五年多时间了,平时都是在C++下使用,最近需要在C#下调用GDAL,所以就开始学习了下,相比C++调用,C#下使用GDAL做图像处理的效率有点低,但是其简单易学,适合菜鸟上手,现把自己刚学到的心得跟大伙分享下,以遥感影像的显示为例。1、 程序环境搭建 首先,需要编译GDAL库的源代码。 GDAL是一个非常强悍的遥感数据格式解析库,支持多种_c#调用遥感图像处理库

html div 水平垂直居中显示,利用CSS实现div水平垂直居中-程序员宅基地

文章浏览阅读55次。实现居中的方案有很多,这里介绍下纯CSS使用absolute配合margin的方案。1. p宽高固定width: 400px;height: 200px;position: absolute;top: 50%;left: 50%;margin-top: -100px;margin-left: -200px;margin-top为-(height / 2),margin-left为-(width /..._"居中"

mysql 乐观锁 version_乐观锁-version的使用-程序员宅基地

文章浏览阅读3.2k次。出处:http://chenzhou123520.iteye.com/blog/1863407乐观锁介绍:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:1.使用数..._乐观锁这个verison有什么用