C语言标准格式化输入输出
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语言标准格式化输入输出相关推荐
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
格式化输入输出 1. fprintf(格式化输出数据至文件) 相关函数 printf,fscanf,vfprintf 表头文件 #include<stdio.h> 定义 ...
- C++格式化输入输出
要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...
- java判断输入的格式化_Java的字符串及格式化输入输出
Java的字符串及格式化输入输出 1.String的不可变 在浅析Java的jvm上的内存位置的分配里已经说明,String使用了常量池技术,所以在栈中的应用要么是指向常量池,要么是指向堆,Strin ...
- std::string格式化输入输出
在C语言中: C函数有sprintf函数, 比较方便, 但是需要知道所需要的内存空间是多少. 在C++的框架MFC中: 在MFC中CString 有Format函数来格式化字符串. 很方便. 难过的是 ...
- C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)
C语言笔记:格式化输入输出(fprintf.fscanf.sscanf-) 包含以下函数的基本库:stdlib.h fprintf int fprintf(FILE *stream, const ch ...
- java格式化输入输出整理(不定时更新)
java格式化输入输出 输入 格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in)) 格式2:Scanner sc = ne ...
- Golang中的格式化输入输出
Golang中的格式化输入输出 打印输出 在Go语言中有多种输出方式,不同的输出适用场景不同.归纳起来有三种,每种还分为3种方式(原内容.原内容+ln.原内容+f) PrintXX() FprintX ...
- 【Python零基础入门篇 · 3】:掌握数值类型、进制的转换、字符串、占位符和格式化输入输出、标识符和保留字
目录 一.数值类型 1.整数类型 整数的不同进制表示方式 2.浮点类型 3.布尔类型 二.进制的转换 1.进制间的转换规则 十进制转换二.八.十六进制图解 2.进制转换的函数 三.字符串 1. 字符串 ...
- c语言字符型输入格式化,c语言之字符串和格式化输入输出
字符串和格式化输入输出 #include #include #define DENSITY 62.4 int main(void) { float weight, volume; int size, ...
最新文章
- JS Window.Open 打开窗口详解
- 【性能】模糊查询性能提升
- 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
- C# 从1到Core--委托与事件
- HttpClientFactory与Steeltoe结合来完成服务发现
- 带徽标的Bootstrap 3 Navbar
- [转载] (三)Python关键字和内置函数
- 【图像修复】基于matlab GUI运动模糊消除(逆滤波)【含Matlab源码 847期】
- Crack内网通积分规则(基于版本3.4.3035)
- Adobe LiveCycle Designer 报表设计器
- Eclipse中快捷键组合
- c语言中个各标点符号作用,C语言运算符和标点符号.xls
- for 循环打印直角三角形、正三角形、棱形
- 兔子繁殖问题----Python
- 802.11 - NDP反馈报告
- 面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
- crt设置自动保存日志的方法
- 如何正确选择python的版本
- 太极创客的项目太乐1号的改造
- 贸然用string比较的后果