目录
- 输入和输出:
- 输入和输出的的功能实现
- 输入输出函数的详细介绍
- 常用占位符:
- 整形
- 浮点型
- 字符型
- 占位符中的辅助控制字符:
输入和输出:
输入输出流程图:
输入和输出的的功能实现
1.c语言本身不提供输入输出功能,实现输入输出是借用c语言函数库中的库函数
2.c语言库中的输入输出函数有
函数 | 操作字符的特征 |
---|---|
getchar(void)/putchar(int a) | 一次操作单个字符 |
gets(void)/puts(int a) | 一次操作一个一个字符串 |
scanf()/printf() | 格式化函数,详细介绍见下文 |
3.在使用函数前要确保加入头文件<stdio.h>
输入输出函数的详细介绍
1. int getchar(void) //单个字符输入函数
功能:从键盘读取一个字符(一次执行只能读取一个字符)
返回值:int指的是返回值的类型,返回值是所读取到字符的ascii码
参数:void指其不需要给定实参
输入原理:键盘的输入会先存在缓冲区之中,等回车确定输入值之后程序才会从缓冲区之中根据输入顺序取字符。
注意:由于输入的是字符,所以回车键也会被读取当做输入量
2. int putchar(int a) //输出单个字符函数
功能:将给定的字符打印。(一次只打印一个字符)
返回值:成功时则返回打印字符的ascii码,失败时则返回-1
参数:该函数要求在括号中给定一个字符参数
由于以上两个函数都是一次都只能读取或打印一次,如果需要输入或打印多个字符则我们可以使用一个循环来达成效果。
3. int printf(const char *fomat,...); //格式化打印函数
功能:将指定的参数按指定的格式打印。
const char *fomat:格式控制字符串,其中包括占位符(见最底部占位符介绍)和普通字符
…:指的是输出参数列表
占位符和输出参数列表从左往右一一对应。
4. int scanf(格式控制字符串,地址参数) // 用于格式化类型输入
功能:将输入以格式匹配的方式进行
其返回值指的是输入成功匹配的个数。
地址参数:指的是存放输入数据的地址。
格式控制字符串:与printf()类似但存在不同,占位符与printf类似。
对普通字符的要求:在输入时要求输入格式与普通字符原样输入。
占位符的区别:辅助控制字符用来规定匹配的数据类型
占位符符 | 与之匹配数据类型 |
---|---|
M | 宽度指定 |
%f | 匹配 float 型数据 |
%lf | 匹配 double 型数据 |
%Lf | 匹配 long double 型数据 |
%d | 匹配int 型数据 |
%ld | 匹配long 型数据 |
%lld | 匹配longlong 型数据 |
使用scanf的注意事项:
1.格式化控制字符中尽量避免普通字符,只写占位符。
(普通字符会影响输入操作的复杂性)
2.scanf地址列表一定要保证是有效地址。
(计算机会将地址参数位置的任何值认为是地址,如果其恰好是操作系统运行内存中的地址,则编译不会通过。)
3.scanf()有特定的结束条件:
a.识别到非法字符会停止
(非法字符是相对于占位符所规定的数据类型而言,如果是%d则其无法识别字符和9以上的数,%o则其无法识别字符和8以上的数等等)
b.识别到空格,换行,回车等空白字符会停止
**特殊情况:在普通字符中一个空白字符能够对应输入缓存空间中的任意个空白字符。**
c.超出规定输入数据字符宽度会停止
5.%*c
表示匹配一个空白字符但不把这个匹配的空白字符给到任何一个地址参数中。
输入易错例子讲解:
#include<stdio.h>
2 int main()
3 {
4 float a;
5 int b;
6 char c;
7 scanf("%d%c%f",&b,&c,&a);
8 printf("b=%d c= %c a= %f",b,c,a);
9 return 0;
10 }
以下列格式输入时:
3 d 1.22
打印值:b=3 c= a= -0.000000
解释:往键盘输入3(空格)d(空格)1.22后,其就被存储在缓存空间中等待匹配。
程序运行时第一个%d将3匹配走了,由于d之前的空格也算是一个字符,因此%c将空格匹配走了,而到了第三个%f时,d对其来说是非法字符,因此输入程序就停止了。
·········································································
若想使得输入都能被正确匹配
第7行代码应改为
7 scanf("%d %c%f",&b,&c,&a);
原理:利用普通字符来抵消缓存空间中的空格,则d字符就能正确读取,后续的%f也能正常读取~
常用占位符:
整形
占位符 | 作用 |
---|---|
%d | 将输出参数转化为有符号十进制数 |
%u | 将输出参数转化为无符号十进制数 |
%o | 将输出参数转化为八进制数 |
%x | 将输出参数转化为无符号十六进制数 |
浮点型
占位符 | 作用 |
---|---|
%f | 将输出参数转化为十进制小数,默认保留六位小数 |
%e | 将输出参数用10进制且科学计数法表示,保留六位小数 |
%E | 将输出参数用10进制且科学计数法表示,e变成大写E,保留六位小数 |
%g | 在%f 的基础上去掉无意义0,采用最简洁表示 |
字符型
占位符 | 作用 |
---|---|
%c | 将输出参数转化为字符形式输出,针对一个字符 |
%s | 将输出参数转化为字符串式输出 |
占位符中的辅助控制字符:
格式:%【辅助控制字符】占位符
辅助控制字符 | 作用 |
---|---|
# | 打印出八进制和十六进制的数据前缀 |
M(占位符前的数字,小数点之前) | 表示要输入数据的宽度,按右对齐 |
—M(占位符前的数字,小数点之前) | 表示要输入数据的宽度,按左对齐 |
0M(数字前的0) | 按M宽度输出后将多余的空位以0来填充 |
.N | 表示所要输出的参数保留N位小数(若对字符串使用则代表取前N个字符) |
l | 用于与占位符相结合来对应8位数据大小的参数 |
ll | 用于与占位符相结合来对应16位数据大小的参数 |
h | 用于与占位符相结合来对应2位数据大小的参数 |