输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数。输出函数的功能是将程序运行的结果输出到屏幕上,而输入函数的功能是通过键盘给程序中的变量赋值。可以说输入输出函数是用户和计算机交互的接口。其中 printf 的功能很强大,用法很灵活,比较难掌握;而 scanf 的用法相对比较固定,但也有很多需要注意的地方。本文我们先介绍printf 的用法,稍后再介绍scanf。

如果在程序中要使用 printf 或者 scanf,那么就必须要包含头文件 stdio.h。因为这两个函数就是包含在该头文件中的。

printf函数称为格式输出函数,其关键字最末一个字母 f 即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。

声明

以下是C中对printf()函数的声明:

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

参数

printf有一个必选的字符串参数,和一个可选的附加参数列表。

  • format – 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。

    format 标签的格式化抽象语法:

     %[flags][width][.precision][length]specifier
    
flags(标识) 描述
- 在给定的字段宽度内左对齐。默认是右对齐(参见 width 子说明符)。
+ 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号,负数前显示 - 号。默认情况下,只有负数前面会显示一个 - 号。
空格 如果没有写入任何符号,则在该值前面插入一个空格。
# 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。
与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。
与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。
0 在指定填充 padding 的数字左边放置零(0),而不是空格(参见 width 子说明符)。
width(宽度) 描述
(number) 要输出的字符的最小数目。如果输出的值短于该数,结果会用空格填充,并且右对齐。如果输出的值长于该数,结果不会被截断。
* 宽度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
.precision(精度) 描述
.number 对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。
对于 e、E 和 f 说明符:要在小数点后输出的小数位数。
对于 g 和 G 说明符:要输出的最大有效位数。
对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。
对于 c 类型:没有任何影响。
当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0。
length(长度) 描述
h 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。
l 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。
L 参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。
specifier(标识符) 描述
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀0)
x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数。默认小数部分输出 6 位,超过 6 位的四舍五入。
e,E 以指数形式输出单、双精度实数
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
p 输出指针地址
lu 32位无符号整数
llu 64位无符号整数
  • 附加参数 – 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数应与 % 标签的个数和顺序都相同。

返回值

  • 如果成功,则返回写入的字符总数,否则返回一个负数。

常用的基本数据类型对应的占位符

常用的转义字符

转义字符 描述 ASCII码(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\t 水平制表(HT) 009
\n 换行(LF) ,将当前位置移到下一行开头 010
\v 垂直制表(VT) 011
\f 换页(FF),将当前位置移到下页开头 012
\r 回车(CR) ,将当前位置移到本行开头 013
\" 双引号 034
%% 百分号 037
\’ 单引号 039
\\ 反斜杠 092

实例:

一些会频繁使用的用法:

#include<stdio.h>
int main()
{int a = 1234;float b = 5.6789;char c[] = "abcde";printf("1:%d\n",a);printf("2:%+d\n",a);printf("3:右对齐%10d\n",a);printf("4:%-10d左对齐\n",a,a);printf("5:%010d\n",a);printf("6:%f\n",b);printf("7:%.2f\n",b);printf("8:右对齐%10.2f\n",b);printf("9:%x\n",a);printf("10:%#x\n",a);printf("11:%e\n",b);printf("12:%s\n",c);printf("13:%p\n",c);printf("14:%c\n",c[0]);printf("15:\\\'\n\"\t%%");
}

输出:

到此,C中的printf函数简介就到此介绍完了。

最后想再提一下Java中的输出语句。Java SE5推出了C语言中printf()风格的格式化输出功能。不仅使得控制输出的代码更加简单,同时也给予Java开发者对于输出格式与排列更强大的控制能力。
C语言的printf()并不能像Java那样连接字符串:printf()并不能使用Java中重载的“+”操作符(C没有重载)来连接引号内的字符串或字符串变量,而是使用特殊的占位符来表示数据将来的位置。
Java SE5总共引入的format()方法可用于PrintStream或PrintWrite,其中也包括System.out对象。format()方法模仿自C的printf()。如果你比较怀旧的话,也可以使用printf(),而且printf()也能更加清晰地表达。

public class Test {public static void main(String[] args) {int x = 5;double y = 5.678;System.out.println("Row 1:[" + x + " " + y + "]");System.out.printf("Row 2:[%d %f]\n", x, y);System.out.format("Row 3:[%d %f]\n", x, y);}
}
/*output:
Row 1:[5 5.678]
Row 2:[5 5.678000]
Row 3:[5 5.678000]
*/

从上可以看出,Java中的printf()和format()是等价的(其实printf底层就是调用的format)。但是Java的printf()和C的printf()也有不同的地方。
在Java中,所有格式化输出功能都由java.util.Formatter类处理。format的格式化就是使用的它。
Formatter类的常规类型、字符类型和数值类型的格式说明符的语法如下:

%[argument_index$][flags][width][.precision]conversion

它还支持用来表示日期和时间类型的格式,语法如下:

 %[argument_index$][flags][width]conversion

他们的详细语法和功能在这里。

C语言之printf简介相关推荐

  1. C语言strtoul函数简介

    C语言strtoul函数简介 一.函数原型:           unsigned long int strtoul(const char *nptr, char **endptr, int base ...

  2. R语言生存分析模型简介及survival包实现实战:基于survival包lung数据集

    R语言生存分析模型简介及survival包实现实战:基于survival包lung数据集 目录 R语言生存分析模型简介及survival包实现实战 #survival包简介

  3. html文档基本结构由哪三对,第3章 网页制作及HTML语言基本结构简介.ppt

    第三章 网页制作与HTML语言基本结构简介 本章提要 静态网页与动态网页 Dreamweaver MX制作网页 HTML语言的基本结构 3.1网页制作概述 3.1.1静态网页与动态网页 1.静态网页 ...

  4. Spark 多语言编程的简介(X)

    Spark的框架使用Scala语言编写的,简洁而优雅: Spark的开发目前主要可以使用三种语言:Scala.Java.Python Spark 同时支持Scala.Python.Java 三种应用程 ...

  5. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  6. c语言数据类型简介表格,C语言基本数据类型简介.docx

    C语言基本数据类型简介课案 HYPERLINK "/onedime/archive/2012/11/21/2780149.html" C语言基本数据类型简介1.概述 C 语言包含的 ...

  7. html语言简介 ppt,网页制作与HTML语言基本结构简介.ppt

    网页制作与HTML语言基本结构简介.ppt 第三章网页制作与HTML语言基本结构简介 本章提要静态网页与动态网页DreamweaverMX制作网页HTML语言的基本结构 3 1网页制作概述 3 1 1 ...

  8. 博途中用的是c吗_S7-1500系列博途中使用SCL语言编程方法简介

    S7-1500系列博途中使用SCL语言编程方法简介 SCL:Structured Contorl Language,结构化控制语言. 在TIA博途软件中,默认支持SCL语言,在建立程序块时可以直接选择 ...

  9. c语言printf的%f语句,在C语言里printf是什么意思怎么

    在C语言里printf是什么意思?怎么用?? 1,printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. 2,printf()函数的调用格式为: printf(" ...

最新文章

  1. python操作excel之 模块 xlrd
  2. springBoot静态资源优先级)
  3. 视觉SLAM十四讲学习笔记-第四讲-Sophus实践、相似变换群与李代数
  4. 网格(UED所谓栅格化)方案生成器
  5. C#:xml操作(待补充)
  6. 使用 IDEA 创建 Scala 工程
  7. Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
  8. 状态压缩DP-棋盘模型总结
  9. 一款开源的中国象棋人工智能程序
  10. 自己研发的系统给rtx发消息
  11. 惠普1005打印机自检页_HP黑白激光打印机打印自检页的方法
  12. pdf文件如何在线转换为jpg图片 1
  13. STM32显示软件取模图片
  14. 如何打开python的终端窗口,python程序窗口怎么打开
  15. 考研前夕 — 成人的世界里没有那么多童话
  16. 定义bool型变量出现 ”identifier “bool” is undefined”错误
  17. 新浪微博爬虫-抓取用户发布的微博
  18. 华盛顿大学计算机语言学,华盛顿大学人工智能专业排名2020年
  19. Parameters(in)、Parameters(out) and Parameters(inout)
  20. CNN(卷积神经网络)在视频动作分类中的应用

热门文章

  1. 机器视觉python推荐书籍_智能硬件与机器视觉:基于树莓派、Python和OpenCV
  2. 掌静脉识别——无法被窃取的生物密码
  3. 蓝桥杯单片机第十届省赛
  4. 鸿蒙系统 台式机,华为台式机MateStation B515上市,未上鸿蒙系统
  5. c语言 石头剪刀布的小程序,微信小程序源码解说:石头剪刀布(附源码下载)(示例代码)...
  6. 蓝牙血压计的android实现思路,蓝牙血压计方案
  7. 我的共享软件开发日志
  8. ElGamal体制和Diffie-Hellman问题
  9. maven-shade-plugin错误 Cannot find 'resource' in class
  10. win2003dns服务器其它域名解析不,win2003 DNS服务器配置方法[图文详解]