文章目录

  • 1、类型符(type)
  • 2、宽度(width)
  • 3、对齐标志(flags)
  • 4、精度(prec)
  • 5、格式化输出到字符串
  • 6、获取视频教程
  • 7、版权声明

C语言格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本文以printf函数为例来介绍它们的用法。

对于 printf函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下:

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

大家看到printf函数的声明就会有点懵,它参数的写法与我们之前学到的函数知识不一样,printf函数是一个“可变参数函数”(即函数参数的个数是可变的),可变参数函数的知识以后再介绍,现在只要知道怎么使用就行了。

printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3个格式说明符对应第 3 个输出参数,以此类推。

其中,格式说明符的形式如下(方括号 [] 中的项为可选项):

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

1、类型符(type)

它用以表示输出数据的类型,以下是常用类型的汇总,不常用的就不介绍了。

%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。

%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数

%c 输出字符。

%lf 以普通方式输出double(float弃用,long doube无用)。

%e 以科学计数法输出double。

%s 输出字符串。

2、宽度(width)

它用于控制输出内容的宽度。

   printf("=%12s=\n","abc");     // 输出=         abc=printf("=%12d=\n",123);       // 输出=         123=printf("=%12lf=\n",123.5);    // 输出=  123.500000=

3、对齐标志(flags)

flags它用于控制输出内容的对齐方式。

不填或+:输出的内容右对齐,这是缺省的方式,上一小节就是右对齐的示例。

-:输出的内容左对齐。

   printf("=%-12s=\n","abc");    // 输出=abc         =printf("=%-12d=\n",123);     // 输出=123         =printf("=%-12f=\n",123.5);    // 输出=123.500000  =

如果输出的内容是整数或浮点数,并且对齐的方式是右对齐,可以加0填充,例如:

   printf("=%012s=\n","abc");  // 输出=         abc=printf("=%012d=\n",123);   // 输出=000000000123=printf("=%012f=\n",123.5);  // 输出=00123.500000=

从上面第一行代码的结果看出,输出的内容不是整数或浮点数,是字符串,不能在前面填0。

左对齐的时候,能在整数或浮点数的后面补0吗?浮点数最多可以补到6位,整数不行,为什么?您的存款能在后面补0吗?

4、精度(prec)

如果输出的内容是浮点数,它用于控制输出内容的精度,也就是说小数点后面保留多少位,后面的数四舍五入。

   printf("=%12.2lf=\n",123.5);   // 输出=      123.50=printf("=%.2lf=\n",123.5);     // 输出=123.50=printf("=%12.2e=\n",123500000000.0);  // 输出=    1.24e+11=printf("=%.2e=\n",123500000000.0);    // 输出=1.24e+11=

5、格式化输出到字符串

int printf(const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);

printf是把结果输出到屏幕,sprintf把格式化输出的内容保存到字符串str中,snprintf的n类似于strncpy中的n,意思是只获取输出结果的前n-1个字符,不是n个字符。

C语言提供了把字符串转换为整数和浮点数据的库函数,但是没有把整数和浮点数据转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。

示例(book98.c)

/** 程序名:book98.c,此程序演示格式化输出sprintf和snprintf函数。* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>int main()
{char str[301];// 格式化输出到str中sprintf(str,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");printf("%s\n",str);// 格式化输出到str中,只截取前7个字符snprintf(str,8,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");printf("%s\n",str);
}

运行结果

程序运行第二行只输出了6个字符,注意,snprintf函数在unix和windows平台下的表现略有不同,在windows平台下,第二行会输出7个字符。

6、获取视频教程

百万年薪程序员录制,《C/C++高性能服务开发基础》视频教程已在CSDN学院发布,优惠价12元,地址如下:
https://edu.csdn.net/course/play/29402

7、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

C语言printf函数详解和示例相关推荐

  1. C语言printf函数详解

    本文已整合到C语言标准库深度解读 printf是绝大多数人接触的第一个C语言函数,但绝大多数人对printf的认识也就到了hello world为止了,很多人甚至看不懂这个函数的声明: int pri ...

  2. C语言scanf函数详解和示例

    文章目录 一.数据输入 二.断章取义 三.scanf输入 1.输入整数 2.输入字符 3.输入浮点数 4.输入字符串 5.输入多个内容 6.示例(book13.c) 四.注意事项 五.获取视频教程 六 ...

  3. c语言memset对应java,C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...

  4. R语言which函数详解以及Rcpp改写

    R语言which函数详解以及Rcpp的改写 引言 which 函数的介绍 which函数的一些小例子 1 2 which函数的改进以及时间对比 引言 首先来介绍一下R语言which函数的作用:whic ...

  5. 【C语言】函数详解(入门到进阶)

    目录 前言 一.什么是函数 二.函数的构成 三.函数的调用和声明 四.函数的参数 五.函数的递归 总结 写在后面 前言 最近帮家里的小朋友整理一些学习C语言的知识点 有整体入门基础文章--[C语言]拯 ...

  6. [C语言] scanf 函数详解多组输入法和gitee 自荐

    自荐 gitee>>> C语言学习练习: C语言学习练习 上面是我的gitee C语言仓库链接,欢迎大家来看看我写的代码.!(◦˘ ³(♡ŐωŐ♡)(给大家推荐gitee(码云)这个 ...

  7. waitpid函数详解+应用示例

    来源:微信公众号「编程学习基地」 文章目录 waitpid函数的使用 waitpid()函数定义 参数详解 使用示例 waitpid函数的使用 当用fork启动一个新的子进程的时候,子进程就有了新的生 ...

  8. C语言strlen函数详解

    strlen函数详解 一.strlen函数简介 1.函数原型 2.注意事项 二.strlen函数模拟实现 1.计数器方式 2.递归实现 3.指针-指针实现 一.strlen函数简介 1.函数原型 si ...

  9. c语言编写printf函数,C语言之printf函数详解

    一  基本用法 格式化控制符:%d %c %ld %lf 意思是:相当于在要输出的语句里面挖了一个坑,也就是在内存中开辟空间,然后再那个坑的位置(也就是开辟好的空间),填上你想要显示的值 printf ...

最新文章

  1. Linux下解决“shutdown: command not found“问题
  2. java cpu 内存_如何检查Java中的CPU和内存使用情况?
  3. in作为介词的用法_英语中in/on/at/to/from/by/with/for/about/after/before的用法
  4. java 格式化小数_java-如何格式化小数位数精度
  5. Node.js入门 - 永恒的Hello World!
  6. Netty工作笔记0060---Netty心跳机制实例
  7. C++ ---------- map的使用
  8. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_5_同步技术的原理...
  9. DTCC大会归来感想
  10. Android Q 上的Biometric生物识别之Fingerprint指纹识别流程
  11. excel整行删除,图片一起删除
  12. 计算机英语断句,英语断句方法
  13. 避雷秘籍:iOS过审的基础条件
  14. 用matlab求 矩阵每一列的平方和 最小值及其下标
  15. 超级码力在线编程大赛初赛第1场-1-树木规划题解
  16. 2015.05.11,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论事情进展” SESSION 44...
  17. 汉语编程联姻大中院校
  18. 硬件产品经理 硬件职业理解 第二弹
  19. slice在php里面什么意思,js中slice()使用方法
  20. zimbra mysql stopping_zimbra数据备份

热门文章

  1. 以父之名想表达什么_科幻电影《猩球崛起3:终极之战》究竟想表达什么?
  2. Python使用UDP协议实现局域网内屏幕广播
  3. Python扩展库numpy中的布尔运算
  4. Python版基于递归的冒泡排序算法
  5. Python简易验证码生成程序
  6. 网络 网络层 | IP协议、网段划分、公网与私网、路由选择
  7. oracle用户身份认证,oracle用户身份认证方式
  8. 力扣559. N 叉树的最大深度(JavaScript)
  9. php html页面获取session,怎么在html中获取session变量
  10. java中求组快速排序函数,如何在Java中实现快速排序?