C语言的标准输入输出都是我们都是在最开始的时候就用到的。但是,它们的原型也有不一样的知识值得探索。

目录

一、标准输出printf( )

(1)Flags

(2)width和.prec

(3)HlL

(4)type

二、标准输入scanf ( )


一、标准输出printf( )

你是不是看见过这样的代码?

double a = 1.12345 , b = 9.87654;
double c = b - a;
printf( "%.2lf" , c );

第三行的printf显然和以前不同。实际上,printf函数的格式化字符串中,在%和类型之间还有很多参数可选填:

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

(1)Flags

Flag 含义
- 左对齐
+ 添加符号
空格 正数留空
0 ' 0 ' 填充

第一个 - 表示左对齐,具体如下:

printf("%9d \n" , 123);
printf("%-9d \n" , 123);

输出结果为:

第一个printf函数中%与d之间的9表示输出一共有九个字符,因此前面多加了9-3=6个空格;后面的printf加了左对齐符号 - ,于是贴着屏幕左侧打印。

第二个+号很容易理解,如

printf("%+d\n",123);

结果就为 “ +123 ” 。

第三项空格就是平常的空格,略过;

第四项0,就拿第一个例子说,假设代码是这样的:

printf("%09d\n",123);
printf("%-09d\n",123);

第一行输出结果为:000000123

因为‘ 9 ’告诉编译器输出要有九个字符,实际只有三个,我们又加了补零的提示,于是前面就用零补齐。

但是,值得注意的是,第二行的输出依然是靠在最左边的123,不会受0影响。

(2)width和.prec

width或.prec 含义
number 输出最小字符数
. number 小数点后输出的字符数
* 下一个参数是最小字符数
.* 下一个参数是小数点后字符数

第一个的功能就是前面的限制最小输出字符数;后面的.number实例如下:

printf("%lf\n" , 123.0);
printf("%.2lf\n" , 123.0);

这两行的输出分别是:

前者没有加.2,系统默认精确到小数点后六位;后者限制了小数点后位数,于是只输出两位。

类似的,* 和 .* 实例如下:

printf("%9d\n",123);
printf("%*d\n",9,123);

第一行和第二行是等价的,都是输出六个空格和123。同理,下面两行也是等价的

printf("%.*lf\n",2,123.0);
printf("%.2lf\n",123.0);

都会输出 “ 123.00 ” 。这样做的意义是让程序拥有更多的灵活性,可以用变量代替格式化字符串中的输出字符限制。

(3)HlL

类型修饰(HIL) 含义
hh 以单个字节形式输出
h short
l long
ll long long
L long double

后四项相信大家都理解,那第一项是什么意思呢?来看代码:

printf("%hhd\n",12345);

这里,我们试图把12345转成单字符形式输出。而输出却是57.怎么回事呢?让我们拿出计算器。

12345的十六进制为0x3039,保留后两位,也就是39,转成十进制就是57。

也就是说,编译器把12345转成十六进制,再取出后两位转成十进制数输出。

(4)type

type 用于 type 用于
i 或 d int g float
u unsigned int G float
o 八进制 a / A 十六进制浮点
x 十六进制 c char
X 十六进制大写字母 s char * / string
f / F / lf float , double p 指针(地址)
e 或 E 指数 n 读写的个数

上表大家看看就好,比较常用的也就 d、f、c、s、p 几种,如果真要其他的自己对照即可

二、标准输入scanf ( )

scanf()的可用命令符就相对较少了:

%[flag]type

(1)Flag

flag 含义 flag 含义
* 跳过 l long,double
number 最大字符数 ll long long
hh char L long double
h short

第一项星号的用法与printf不同,如下:

int num;
scanf("%*d%d" , &num);
printf("%d \n" , num);

假如输入123和456,打印结果只有456,说明 * 表示跳过后面一个类型的参数。

其他的和printf一样一样的,不做赘述。

(2)type

type 用于 type 用于
d int s char * / string
i int(数据能为十六进制、八进制) [...] 所允许的字符
o 八进制 p 指针(地址)
x 十六进制
u unsigned int
a / e / f / g float
c char

这里和上面的差不多,%d和%i的主要区别在于,%d只能接受十进制数,二%i则是后来新增的,支持八进制以及十六进制数的输入,更加灵活。

最后,制作不易,点个赞呗~

C语言标准格式化输入输出相关推荐

  1. fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出

    格式化输入输出 1.         fprintf(格式化输出数据至文件) 相关函数  printf,fscanf,vfprintf 表头文件  #include<stdio.h> 定义 ...

  2. C++格式化输入输出

    要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...

  3. java判断输入的格式化_Java的字符串及格式化输入输出

    Java的字符串及格式化输入输出 1.String的不可变 在浅析Java的jvm上的内存位置的分配里已经说明,String使用了常量池技术,所以在栈中的应用要么是指向常量池,要么是指向堆,Strin ...

  4. std::string格式化输入输出

    在C语言中: C函数有sprintf函数, 比较方便, 但是需要知道所需要的内存空间是多少. 在C++的框架MFC中: 在MFC中CString 有Format函数来格式化字符串. 很方便. 难过的是 ...

  5. C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)

    C语言笔记:格式化输入输出(fprintf.fscanf.sscanf-) 包含以下函数的基本库:stdlib.h fprintf int fprintf(FILE *stream, const ch ...

  6. java格式化输入输出整理(不定时更新)

    java格式化输入输出 输入 格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in)) 格式2:Scanner sc = ne ...

  7. Golang中的格式化输入输出

    Golang中的格式化输入输出 打印输出 在Go语言中有多种输出方式,不同的输出适用场景不同.归纳起来有三种,每种还分为3种方式(原内容.原内容+ln.原内容+f) PrintXX() FprintX ...

  8. 【Python零基础入门篇 · 3】:掌握数值类型、进制的转换、字符串、占位符和格式化输入输出、标识符和保留字

    目录 一.数值类型 1.整数类型 整数的不同进制表示方式 2.浮点类型 3.布尔类型 二.进制的转换 1.进制间的转换规则 十进制转换二.八.十六进制图解 2.进制转换的函数 三.字符串 1. 字符串 ...

  9. c语言字符型输入格式化,c语言之字符串和格式化输入输出

    字符串和格式化输入输出 #include #include #define DENSITY 62.4 int main(void) { float weight, volume; int size, ...

最新文章

  1. JS Window.Open 打开窗口详解
  2. 【性能】模糊查询性能提升
  3. 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
  4. C# 从1到Core--委托与事件
  5. HttpClientFactory与Steeltoe结合来完成服务发现
  6. 带徽标的Bootstrap 3 Navbar
  7. [转载] (三)Python关键字和内置函数
  8. 【图像修复】基于matlab GUI运动模糊消除(逆滤波)【含Matlab源码 847期】
  9. Crack内网通积分规则(基于版本3.4.3035)
  10. Adobe LiveCycle Designer 报表设计器
  11. Eclipse中快捷键组合
  12. c语言中个各标点符号作用,C语言运算符和标点符号.xls
  13. for 循环打印直角三角形、正三角形、棱形
  14. 兔子繁殖问题----Python
  15. 802.11 - NDP反馈报告
  16. 面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
  17. crt设置自动保存日志的方法
  18. 如何正确选择python的版本
  19. 太极创客的项目太乐1号的改造
  20. 贸然用string比较的后果

热门文章

  1. Unity3D 修改动画,资源文件设置
  2. FileUtils工具类详解
  3. 怎么修改linux系统时区,Linux系统时区该怎么修改?
  4. 基于stknx 的 usb to knx 调试
  5. 微波雷达人体感应开关模块 智能感应探测器 XBG-M555
  6. PostgreSQL的学习心得和知识总结(一百一十五)|词法级自上而下完美实现MySQL数据库的 反引号 的实现方案
  7. eclipse-2019版本怎么改为中文语言?
  8. swift语言特性,swift语法介绍,swift使用技巧
  9. Cocos creator ListView 优化
  10. matlab GS算法