当前位置:网站首页>【建议收藏】ヾ(^▽^*)))全网最全输入输出格式符整理
【建议收藏】ヾ(^▽^*)))全网最全输入输出格式符整理
2022-08-01 21:34:00 【万羽西】
输入输出格式符
前言
大家好呀,我是Aaron,一只想要在C++里为所欲为的博主,之前博主在刷题的时候遇到一些格式控制符的问题,感觉这东西不整理一下还真是挺乱的,所以借机查阅资料,疯狂整理,给大家出一期整理有关输入输出控制格式符的博文,建议收藏哦!!请大家慢慢看完,如果觉得对自己有帮助,不妨o( ̄▽ ̄)d
一键三连呀!!
点赞 + 关注 + 收藏
数据输入语句
C语言的数据输入是由函数完成的,这里我们介绍scanf函数和getchar函数两种
一、 scanf函数
scanf函数是一个标准库函数,他的函数原型在头文件<stdio.h>中。 scanf 函数的一般形式为:scanf
(“格式控制字符串”, 元素地址),与printf函数不同,scanf 函数不能显示非格式字符串,也就是不能显示提示字符串,,
元素地址由两部分组成:
1. 取地址运算符&
2. 变量名 例如,&a, &b 分别表示变量 a 和 b 的地址,这个地址就是编译系统在内存中给变量 a, b
分配的地址的编号,这里不做过多介绍,如果有想要了解地址方面的底层知识,欢迎评论区留言哦,博主去整理!!
下面给出
scnaf 函数使用的例子
代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("please enter the two integers:>");
scanf("%d %d", &a, &b);
printf("a = %d b = %d", a, b);
return 0;
}
在本例中,由于 scanf 函数本身不能显示提示字符串,所以先用 printf 函数在屏幕上提示用户输入两个整数,然后执行 scanf 函数,用户由控制台输入两个整数,最后打印。
格式字符串
格式字符串的一般形式为:% + [*] + [输入数据宽度] + [长度] + 类型
其中有方括号[ ]的项为任选项,可以有,也可以没有,接下来介绍各项的意义:
1) 类型
表示输入数据的类型,其格式和意义如下表所示:
| 格式 | 字符意义 |
|---|---|
| d | 输入十进制整数 |
| o | 输入八进制整数 |
| x | 输入十六进制整数 |
| u | 输入无符号十进制整数 |
| f | 输入实型数(浮点数数形式) |
| e | 输入实型数(指数形式) |
| c | 输入单个字符 |
| s | 输入字符串 |
使用起来的效果就是:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
// 输入
scanf("%d %o %x", &a, &b, &c);
// a - 输入十进制数
// b - 输入八进制数
// c - 输入十六进制数
return 0;
}
其他的类比就行,不过要注意创建变量时的数据类型
2)“ * ” 符
这个控制格式符有一点点奇怪,但我们还是要了解,* 用以表示该输入项读入后不赋予相应的变量,即跳过该输入值。
这个控制符是真的很奇怪,下面给出代码解释一下
代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %*d %d", &a, &b, &c);
printf("%d %d %d", a, b, c);
return 0;
}
小伙伴们可以拿这个代码去试验一下,一定会报错,这里我就把报错截图给大家展示一下:
报错截图:

报错截图里显示:
格式字符串传递参数过多,再结合我上面说的 * 控制符的用法,应该是这里代码的 &b 多余了,现在我们去掉再来试验:
代码:

这里我们可以看到,代码确实跑起来了,但是只输入两个值是不够的的,这里博主再次测试,输入三个值,
演示:
我们可以看到,输入三个值,但 b 却没有改变,那到底是默认赋值为 0 还是保留初识化的值是 0 呢,为了严谨,让大家理解的没有一点问题,这里博主再次试验,改变 b 的初识化的值,给大家展示:

由此可以看出,是保留了初识化的值,相当于 scanf 函数对 b 没有起到输入值的作用,虽然很神奇,但博主认为这个 * 控制符也未免太鸡肋了些许
3)宽度
宽度的概念:用十进制整数指定输入的宽度(即字符数)。
举个例子:scanf(“%mdmd”, &a, &b);
输入:12345678
结果是将1234赋值给a, 5678赋值给b
给出代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%4d%4d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}
运行结果:
变种:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%3d%5d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}

int main()
{
int a = 0;
int b = 0;
scanf("%3d%4d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}

4)长度
长度格式符为 l 和 h , l 表示输入长整型数据(如:%ld)和双精度浮点数(如:%lf)。h 表示输入短整型数据。
使用 scanf 函数必须注意:
- scanf 函数中没有精度控制,如: scanf (" %5.2f ", &a); 是非法的,不能企图用这样的语句输入小数为两位的实数。
- scanf 函数要求给出变量地址,直接给变量名会出错。如: scanf (" %d “, a); 是非法的,必须写成 scanf (” %d ", &a) ; 的形式。
- 在输入多个数据时,如果 scanf 函数里没有非格式控制符作为数据之间的间隔,我们在控制台输入的时候可以用空格将数据分开,但是注意,在输入连续字符串时,C 编译默认遇到空格,回车,tab 或者非法数据时结束。
- 在输入字符数据时,如果 scanf 中没有非格式控制符,则会认为所有输入的字符均有效,例如:scanf (" %c%c%c “, &a, &b, &c); 输入:d e f, 则会把 ’ d ’ 赋给 a, ’ ’ 赋给 b, ’ e ’ 赋给 c。很明显,这样是错误的,也就是说,我们要按照空格间隔的方式输入字符的话,就必须在 scanf 里使用相应的非格式控制符模式,如:scanf (” %c %c %c ", &a, &b, &c);
- 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。例如: scanf (" %d,%d,%d",&a, &b, &c) ; 其中用非格式符 “ , ”作间隔符,故输入时应为: 5,6,7 。 又如:scanf (" a = %d, b = %d, c = %d", &a, &b, &c); 则输入应为 a = 5,b = 6,c = 7。
如果输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。例如:
#include <stdio.h>
int main()
{
long a = 0.0;
scanf("%ld", &a);
printf("%d\n", a);
return 0;
}

需要将所有控制长度的控制符保持一值,才可以正常运行,也不会产生bug。
二、getchar函数
getchar 函数的功能是从键盘上输入一个字符。其一般形式为: getchar(); 通常把输入的字符赋予一个字符变量,构成赋值语句,如:
char c = 0;
c = getchar();
使用 getchar 函数需要注意的问题:
- getchar 函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。
- 使用 getchar 函数必须包含标准输入输出函数:“stdio.h”
数据输出语句
一、printf 函数调用的一般形式
printf 函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。printf 函数调用的一般形式为: printf (“格式控制字符串”,输出表列)其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以 % 开头的字符串,在 % 后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如 “%d” 表示按十进制整型输出,“%ld” 表示按十进制长整型输出,“%c” 表示按字符型输出等。后面将专门给予讨论。
非格式字符串在输出时按照原样打印,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
给出一个例子,看出不同格式控制符和不同非格式字符串打印的区别:
代码:
#include <stdio.h>
int main()
{
int a = 65;
int b = 66;
printf("%d %d\n", a, b);
printf("%d,%d\n", a, b);
printf("%c,%c\n", a, b);
printf("a = %d, b = %d\n", a, b);
}
打印结果:
本例中四次输出了 a, b 的值,但由于格式控制串不同,输出的结果也不相同。第一个 printf 的输出语句格式控制串中,两格式串 %d 之间加了一个空格 ( 非格式字符 ) ,所以输出的 a, b 值之间有一个空格。第二个 printf 语句格式控制串中加入的是非格式字符逗号,因此输出的 a, b 值之间加了一个逗号。第三个 printf 的格式串要求按字符型输出 a, b 值。第四个 printf 中为了提示输出结果又增加了非格式字符串。
二、格式字符串
在Turbo C 中格式字符串的一般形式为: [ 标志 ] [ 输出最小宽度 ] [.精度 ] [ 长度 ] 类型其中方括号 [ ] 中的项为可选项。各项的意义介绍如下:
- 类型字符用以表示输出数据的类型
其格式符和意义下表所示:
| 表示输出类型的格式字符串 | 格式字符意义 |
|---|---|
| d | 以十进制形式输出带符号整数(正数不输出符号) |
| o | 以八进制形式输出无符号整数(不输出前缀o) |
| x | 以十六进制形式输出无符号整数(不输出前缀0x) |
| u | 以十进制形式输出无符号整数 |
| f | 以小数形式输出单精度实数 |
| lf | 以小数形式输出双精度实数 |
| e | 以指数形式输出单、双精度实数 |
| g | 以 %f %e 中较短的输出宽度输出单、双精度实数 |
| c | 输出单个字符 |
| s | 输出字符串 |
- 标志
标志字符为 - 、 + 、 # 、空格四种。
其意义下表所示:
| 标志格式字符 | 标志意义 |
|---|---|
| - | 结果左对齐,右边填空格 |
| + | 输出符号(正号或负号) |
| 空格 | 输出值为正时冠以空格,为负时冠以负号 |
| # | 对c,s ,d,u类无影响,对o,x加以前导,对e,g,f类有小数时给出小数点 |
- 输出最小宽度
用十进制整数来表示输出的最少位数。 若实际位数多于定义的宽度,则按实际位数输出, 若实际位数少于定义的宽度则补以空格或0。
- 精度
精度格式符以 “.” 开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
- 长度
长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
光看概念怎么能理解呢,下面可以请大家思考一下以下代码,看看你们的结果是什么:
- 第一题
#include <stdio.h>
void main()
{
int a = 15;
float b = 138.3576278f;
double c = 35648256.3645687;
char d = 'p';
printf("a = %d, %o, %x\n", a, a, a);
printf("b = %f, %lf, %.4lf, %e\n", b, b, b, b);
printf("c = %lf, %f, %.4lf\n", c, c, c);
printf("d = %c\n", d);
}
结果:
2. 第二题:
#include <stdio.h>
int main()
{
int a = 29;
float b = 1243.2341f;
double c = 24212345.24232;
char d = 'h';
printf("a = %d, %o, %x\n", a, a, a);
printf("b = %f, %lf, %.4lf, %e\n", b, b, b, b);
printf("c = %lf, %f, %.4lf\n", c, c, c);
printf("d = %c\n", d);
return 0;
}
运行结果:

使用 printf 函数时还要注意一个问题, 那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。如下例所述形式:
#include <stdio.h>
int main()
{
int i = 8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n", ++i, --i, i--, i++, -i--, -i++);
return 0;
}
运行结果:
*上面这个代码不同编译器输出结果可能不同,说实话算是个错误代码,但为了说明运行顺序,还是用这个代码给大家举个例子,不用太过纠结,博主用的VS2019是从右往左运算的哦~*
三、 字符输出函数(putchar)
putchar 函数:
putchar 函数是字符输出函数, 其功能是在显示器上输出单个字符。其一般形式为: putchar(字符变量)
例如:
putchar('A'); // -- 输出大写字母A
putchar(x); // -- 输出字符变量x的值
putchar('\n'); // --换行 对控制字符则执行控制功能,不在屏幕上显示。
使用本函数前必须要用文件包含命令: # include < stdio.h >
给出代码方便理解:
#include <stdio.h>
int main()
{
char a = 'B';
char b = 'o';
char c = 'k';
putchar(a);
putchar(b);
putchar(b);
putchar(c);
putchar('\t');
putchar('\n');
putchar(a);
putchar(b);
putchar(b);
putchar(c);
return 0;
}

总结
以上就是本文全部内容啦!!因为博主经常忘记,每次都要去查,觉得很麻烦,所以特地整理了一下,对博主自己很有帮助,也希望可以帮助到大家喔~~对这种细节知识点的掌握对我们写代码的时候会很有帮助呢!
最后希望大家不要白嫖 不要白嫖 不要白嫖
点赞 + 收藏 + 关注

边栏推荐
- Flink cluster construction
- Based on php online learning platform management system acquisition (php graduation design)
- 基于php在线考试管理系统获取(php毕业设计)
- 【Jmeter常用断言组件】
- SQL injection of WEB penetration
- LVS负载均衡群集
- ISC2022 HackingClub white hat summit countdown 1 day!Most comprehensive agenda formally announced!Yuan universe, wonderful!
- ARFoundation入门教程U2-AR场景截图截屏
- 【Unity实战100例】文件压缩Zip和ZIP文件的解压
- Realize the superposition display analysis of DWG drawing with CAD in Cesium
猜你喜欢

LeetCode952三部曲之二:小幅度优化(137ms -> 122ms,超39% -> 超51%)

基于php在线音乐网站管理系统获取(php毕业设计)

scikit-learn no moudule named six

Based on php tourism website management system acquisition (php graduation design)

MySQL相关知识

Realize the superposition display analysis of DWG drawing with CAD in Cesium

ISC2022 HackingClub white hat summit countdown 1 day!Most comprehensive agenda formally announced!Yuan universe, wonderful!

Small program -- subcontracting

WEB 渗透之文件类操作

19 Lectures on Disassembly of Multi-merchant Mall System Functions - Invoice Management on the Platform
随机推荐
基于php动漫周边商城管理系统(php毕业设计)
Appendix A printf, varargs and stdarg a. 2 use varargs. H to realize the variable argument list
”sed“ shell脚本三剑客
0DFS Medium LeetCode6134. Find the closest node to the given two nodes
Pagoda application experience
【Objective-C中的@synthesize】
Homework 8.1 Orphans and Zombies
第一讲 测试知多少
树莓派的信息显示小屏幕,显示时间、IP地址、CPU信息、内存信息(c语言),四线的i2c通信,0.96寸oled屏幕
关于npm的那些事儿
C语言必杀技3行代码把运行速度提升4倍
The difference between groupByKey and reduceBykey
【力扣】字符串相乘
测试开发人均年薪30w+?软件测试工程师如何进阶拿到高薪?
Spark练习题+答案
groupByKey和reduceBykey的区别
TP5-NPs负载噻吩类化合物TP5白蛋白纳米粒/阿魏酸钠新糖牛血清蛋白纳米粒
用户量大,Redis没法缓存响应,数据库宕机?如何排查解决?
AI应用第一课:支付宝刷脸登录
基于php酒店在线预定管理系统获取(php毕业设计)