【C语言指南】printf()函数详解

2024-07-21 1388阅读

 

          💓 博客主页:倔强的石头的CSDN主页 

           📝Gitee主页:倔强的石头的gitee主页

            ⏩ 文章专栏:《C语言指南》

                                  期待您的关注

【C语言指南】printf()函数详解

文章目录

(本篇内容全面,篇幅较长,建议收藏,方便查阅)

1.printf函数的语法简介

1.1 函数原型 

1.2 头文件

1.3 返回值

1.4 参数

1.5 附加参数

2. 转换说明符

2.1 转换说明符表:

2.2 常见的转换说明符用法示例

3.输出格式控制

3.1 标志(flags)

3.2 最小宽度(width)

3.3 精度(.precision)

3.4 类型长度(length)

4.其他问题

4.1 转义字符

4.2  printf语句输出过长时的解决办法

参考资料  


1.printf函数的语法简介

printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。

printf 是C语言标准库函数,定义于头文件 。

printf 函数的一般调用格式为:printf("", ) 。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义

1.1 函数原型 

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

1.2 头文件

1.3 返回值

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

注意:返回的字符总数将空格和 \n等转义字符都包括在内

#include //使用printf函数需要包含的头文件
int main()
{
	int a = printf("hello world!\n");
	printf("%d\n", a);
	return 0;
}

 【C语言指南】printf()函数详解

1.4 参数

参数format -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。

普通字符:在输出时,普通字符将原样不动地复制到标准输出。

转换说明:转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明符结束,从而说明输出数据的类型、宽度、精度等。

1.5 附加参数

  • 附加参数的简介:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。关于附加参数,既可以是变量,也可以是常量。
  • 附加参数的位置:printf()函数的普通字符和转换说明放在" "双引号内,附加参数放在双引号外,每个附加参数之间用逗号隔开
  • 附加参数的个数:printf() 的附加参数与转换说明符是⼀⼀对应关系,如果有 n 个转换说明符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转换说明符, printf() 可能会输出内存中的任意值。

    printf()函数的参数和附加参数是非常重要的部分,对于理解更深层次的内容是基础

     关于参数和附加参数的示例:

    #include
    int main()
    {
    	printf("2");
    	printf("abc");
    	//打印普通字符
    	printf("\n");
    	//打印转义字符
    	printf("%d peoples are saying %s\n", 2, "hello world");
    	//peoples are saying 为普通字符,直接输出
    	//%d 和 %s是转换说明符,分别对应附加参数——整型常量2 和字符串常量hello world
    	int a = 2;
    	char arr[] = "hello world";
    	printf("%d peoples are saying %s\n", a, arr);
    	//peoples are saying 为普通字符,直接输出
    	//%d 和 %s是转换说明符,分别对应附加参数——整型变量a 和字符数组arr
    	return 0;
    }

    【C语言指南】printf()函数详解

    2. 转换说明符

    注:转换说明符又被称为 格式控制符、格式占位符、占位符等,不同的名字所代表的含义是相同的

    printf 的格式控制字符串 format 中的转换说明组成如下,其中 [ ] 中的部分是可选的,但%

    和转换说明符是必不可少的:

    %[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]转换说明符

    转换说明符(specifier)用于规定输出数据的类型,含义如下:

    2.1 转换说明符表:

    说明符(specifier)

    对应数据类型

    描述

    d / i

    int

    输出类型为有符号的十进制整数,i 是老式写法

    o

    unsigned int

    输出类型为无符号八进制整数(没有前导 0)

    u

    unsigned int

    输出类型为无符号十进制整数

    x / X

    unsigned int

    输出类型为无符号十六进制整数,x 对应的是 abcdef,X 对应的是 ABCDEF(没有前导 0x 或者 0X)

    f / lf

    double

    输出类型为十进制表示的浮点数,默认精度为6(lf 在 C99 开始加入标准,意思和 f 相同)

    e / E

    double

    输出类型为科学计数法表示的数,此处 "e" 的大小写代表在输出时用的 “e” 的大小写,默认浮点数精度为6

    g

    double

    根据数值不同自动选择 %f 或 %e,%e 格式在指数小于-4或指数大于等于精度时用使用 

    G

    double

    根据数值不同自动选择 %f 或 %E,%E 格式在指数小于-4或指数大于等于精度时用使用

    c

    char

    输出类型为字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

    s

    char *

    输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '\0‘ 结尾,这个 '\0' 即空字符)或者已打印了由精度指定的字符数

    p

    void *

    以16进制形式输出指针

    %

    不转换参数

    不进行转换,两个%表示输出一个字符‘%’(百分号)本身

    n

    int *

    到此字符之前为止,一共输出的字符个数,不输出文本 

    2.2 常见的转换说明符用法示例

    #include
    int main()
    {
    	printf("%d\n", 10);//有符号整型十进制
    	printf("%u\n", 10);//无符号整型十进制
    	printf("%o\n", 10);//无符号整型八进制
    	printf("%x\n", 10);//无符号整型十六进制小写
    	printf("%X\n", 10);//无符号整型十六进制大写
    	printf("%f\n", 10.0);//浮点型(包括float 和 double)
    	printf("%c\n", 'a');//字符型
    	printf("%s\n", "abc");//字符串
    	int a = 1;
    	printf("%p\n", &a);//指针型,输出地址
    	return 0;
    }
    

     【C语言指南】printf()函数详解

    3.输出格式控制

    3.1 标志(flags)

    标志(flags)用于规定输出样式,含义如下:

    标志描述
    -在给定的字段宽度内左对齐;          右对齐是默认值(请参阅宽度子说明符)。
    +强制在结果前面加上加号或减号(+ 或 -),即使对于正数也是如此。默认情况下,只有负数前面带有 - 符号。
    (空格)如果不写符号,则在值之前插入一个空格。
    #与 o、x 或 X 说明符一起使用时,对于不为零的值,该值前面分别带有 0、0x 或 0X。

    与 e、E、f、F、g 或 G 一起使用时,即使后面没有更多数字,它也会强制写入的输出包含小数点。默认情况下,如果没有数字跟随,则不写入小数点。

    0指定填充时,用零 (0) 而不是空格填充数字(请参阅宽度子说明符)。
    #include
    int main()
    {
    	printf("%-d\n", 10);//左对齐格式
    	printf("%+d\n", 10);//正数输出带正号
    	printf("% d\n", 10);//在值之前插入一个空格
    	printf("%#x\n", 10);//输出时带进制符号
    	printf("%05d\n", 10);//使用数字0填充宽度
    	return 0;
    }

     【C语言指南】printf()函数详解

    3.2 最小宽度(width)

    最小宽度(width)用于控制显示字段的宽度,用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

    取值和含义如下:

    width(最小宽度)

    字符名称

    描述

    digit(n)

    数字

    字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出 

    *

    星号

    宽度在 format 字符串中规定位置未指定,使用星号标识附加参数,指示下一个参数是width 

    #include
    int main()
    {
    	printf("%5d\n", 6);//要求最小输出5位,默认右对齐,用空格填充
    	printf("%05d\n", 6);//也可以运用上面的标志符号  使用0填充
    	printf("%*d\n", 5, 6);//填充字符用星号指代 内容对应后面的附加参数
    	printf("%0*d\n", 5, 6);
    	return 0;
    }

     输出结果:

    【C语言指南】printf()函数详解

    3.3 精度(.precision)

     精度(.precision)用于指定输出精度,以“.”开头,后跟十进制整数

    取值和含义如下:

    .precision(精度)

    字符名称

    描述

    .digit(n)

    点+数字

    对于整数说明符(d、i、o、u、x、X):precision 指定了要打印的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符;

    对于 e、E 和 f 说明符:要在小数点后输出的小数位数;

    对于 g 和 G 说明符:要输出的最大有效位数;

    对于 s 说明符:要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符;

    对于 c 说明符:没有任何影响;

    当未指定任何精度时,默认为 1。如果指定时只使用点而不带有一个显式值,则标识其后跟随一个 0。 

    .*

    点+星号

    精度在 format 字符串中规定位置未指定,使用点+星号标识附加参数,指示下一个参数是精度 

    #include
    int main()
    {
    	printf("%.6d\n", 3);//对于整型,相当于限制输出位数 不足补0
    	printf("%.6f\n", 3.1415926);//对于浮点型,限制小数点后位数,超出截断
    	printf("%.6f\n", 3.14);//不足补0
    	printf("%.6g\n", 3.1415926);//对于g和G,限制总的输出位数
    	printf("%.6s\n", "abcd efgh");//限制字符串的输出长度,空格计算在内
    	printf("%.6s\n", "abcd\0efgh");//遇到\0停止
    	printf("%.f\n", 3.1415926);//如果只有小数点没有数字,默认为保留0位
    	return 0;
    }

     运算结果如下:

     【C语言指南】printf()函数详解

    3.4 类型长度(length)

    类型长度(length)用于控制待输出整型数据的数据类型长度,取值和含义如下:

    length(类型长度)

    描述

    h

    参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X) 

    l

    参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串) 

    #include
    int main()
    {
    	printf("%d\n", 12345678);//正常打印
    	printf("%hd\n", 12345678);//解释为短整型输出(可能会丢失数据)
    	printf("%hd\n", 1234);//解释为短整型输出
    	printf("%ld\n", 12345678);//解释为长整型输出
    	return 0;
    }

     【C语言指南】printf()函数详解

    4.其他问题

    4.1 转义字符

    关于转义字符的问题请查看这篇博客,本文不再重复介绍

    转义字符使用详解【C语言】-CSDN博客

    4.2  printf语句输出过长时的解决办法

    当一条printf语句中的输出内容过长时,放在一行内显示,阅读很不方便,而且很不美观,甚至于不能在一行放下

    此时有三种解决方法如下:

    • 方法一    使用多个printf语句
    • 方法二    在需要换行的地方使用   反斜杠+回车  注意第二行必须从最左侧开始
    • 方法三    字符串拼接的方式  将多段内容放在不同的双引号内 两个双引号之间使用回车
      #include
      int main()
      {
      	//方法一 使用多个printf语句
      	printf("Writes the C string pointed");
      	printf(" by format to the standard output\n");
      	//方法二 反斜杠+回车  注意第二行必须从最左侧开始
      	printf("Writes the C string pointed \
      by format to the standard output\n");
      	//方法三 字符串拼接的方式 
      	// 将多段内容放在不同的双引号内 两个双引号之间使用回车
      	printf("Writes the C string pointed "
      		"by format to the standard output\n");
      	return 0;
      }

      【C语言指南】printf()函数详解

      参考资料  

      printf - C++ Reference (cplusplus.com)

       printf(格式化输出函数)_百度百科 (baidu.com)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]