Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

C语言之printf( )详解

 Share


NedK7

Recommended Posts

 

一、基本概念

1、定义:

printf() 是 C 语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。使用 printf() 时 要加头文件 stdio.h。

2、函数原型:

int printf ( const char * format, ... );

3、返回值:

正确返回输出的字符总数,错误返回负值。与此同时,输入输出流错误标志将被置值,可由指示器函数 ferror(FILE *stream) 来检查输入输出流的错误标志,如果 ferror() 返回一个非零值,表示出错。

4、调用格式:

printf("格式化字符串", 输出表列)

5、格式化字符串包含三种对象,分别为:

1)字符串常量;
2)格式控制字符串;
3)转义字符。

字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以 % 开头的字符串,在 % 后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。

二、格式控制字符串

1、printf() 的格式控制字符串组成如下:

%[flags][width][.prec][length]type

分别为:

%[标志][最小宽度][.精度][类型长度]类型。

2、类型(type)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、标志
flags 规定输出样式,取值和含义如下:
在这里插入图片描述

type是a、A、e、E、f、g、G时,一定使用小数点。默认的,如果使用.0控制不输出小数部分,则不输出小数点。

type是g、G时,尾部的0保留。数字零将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)。

示例:

printf("%5d\n",1000);     //默认右对齐,左边补空格
printf("%-5d\n",1000);     //左对齐,右边补空格

printf("%+d %+d\n",1000,-1000);  //输出正负号

printf("% d % d\n",1000,-1000);  //正号用空格替代,负号输出

printf("%x %#x\n",1000,1000);  //输出0x

printf("%.0f %#.0f\n",1000.0,1000.0)//当小数点后不输出值时依然输出小数点

printf("%g %#g\n",1000.0,1000.0); //保留小数点后后的0

printf("%05d\n",1000);    //前面补0

输出结果为:

在这里插入图片描述

4、最小宽度

用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下:
在这里插入图片描述

5、精度
精度格式符以“.”开头,后跟十进制整数。可取值如下:
在这里插入图片描述
1)对于整型(d,i,o,u,x,X),precision表示输出的最小的数字个数,不足补前导零,超过不截断。
2)对于浮点型(a, A, e, E, f ),precision表示小数点后数值位数,默认为六位,不足补后置0,超过则截断。
3)对于类型说明符g或G,表示可输出的最大有效数字。
4)对于字符串(s),precision表示最大可输出字符数,不足正常输出,超过则截断。
precision不显示指定,则默认为0。以星号代替数值,类似于width中的*,在输出参数列表中指定精度。

示例:

printf("%.8d\n",1000);   //不足指定宽度补前导0,效果等同于%08d
printf("%.8f\n",1000.123456789);//超过精度,截断
printf("%.8f\n",1000.123456); //不足精度,补后置0
printf("%.8g\n",1000.123456); //最大有效数字为8位
printf("%.8s\n",“abcdefghij”); //超过指定长度截断

输出结果:

00001000
1000.12345679
1000.12345600
1000.1235
abcdefgh

注意: 在对浮点数和整数截断时,存在四舍五入。

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...