标准功能
这里是 C 中提供的一些标准功能
标准库
必须引入stdlib.h
头文件
- srand
- rand
- exit
- system
- malloc
- calloc
- realloc
- free
IO
必须引入stdio.h
头文件
printf
printf
常用于打印一些信息到屏幕上,是使用的最频繁的函数,也叫做格式化输出函数,它的函数原型是int printf(Control-string, item1, item2, ...)
printf("2"); // 2
它通常和格式化占位符搭配使用来实现对字符串的输出控制
printf("今年我才%d岁单身噢", 18); // 今年的我才18岁单身噢
会发现18
将%d
给替换了,这个%d
就是格式化占位符中的一种,这说明printf
第一个参数之外的参数都可以通过占位符来替换第一个参数中指定的部分,都是按顺序的
printf("余额宝今日又增加了%d的收益", 0.01); // 余额宝今日又增加了1202590843的收益
printf("余额宝今日又增加了%f的收益", 0.01); // 余额宝今日又增加了0.010000的收益
在上面这个例子中,很显然%d
不能够帮浮点数正确的显示,而%f
可以,这说明不同的数据类型应使用不同的格式化占位符,下面是一些常用的格式化占位符:
类型 | 含义 |
---|---|
d | 整数 |
f | 单,双精度浮点(带有 6 位小数) |
o | 无符号八进制 |
x | 无符号十六进制 |
c | 字符 |
s | 字符串 |
p | 地址 |
然而这只是占位符中的一种用法,占位符还可以决定数据如何显示,比如控制小数点位数:
printf("余额宝今日又增加了%.2f的收益", 0.01); // 余额宝今日又增加了0.01的收益
控制字符输出宽度:
printf("今年我%5d岁还单身", 18); // 今年我 18岁还单身
printf("今年我%-5d岁还单身", 18); // 今年我18 岁还单身
printf("今年我%05d岁还单身", 18); // 今年我00018岁还单身
printf("余额宝今日又增加了%4.2f的收益", 0.01); // 余额宝今日又增加了0.01的收益
printf("余额宝今日又增加了%5.2f的收益", 0.01); // 余额宝今日又增加了 0.01的收益
printf("余额宝今日又增加了%-5.2f的收益", 0.01); // 余额宝今日又增加了0.01 的收益
printf("余额宝今日又增加了%05.2f的收益", 0.01); // 余额宝今日又增加了000.01的收益
%
后面不仅可以指定类型,精度,也可以指定宽度,当输出的位数小于指定宽度时会在左边使用空格补齐,输出的位数大于指定宽度会按原样输出,如果给宽度指定-
,则会从右边补齐空格。也可以指定0
来补齐,只适用不加-
的情况下
另外,printf
是有返回值的,它会返回打印的字符数,包括看不见的空格或新字符
int num = printf("Hello, world!");
printf("%d", num); // 13
如果字符串过长,打印时需要拆分怎么办呢,有三种办法:
- 使用多个
printf()
- 使用
\
结束第一行的末尾,会自动连接下一行
printf("Hello,\
world!");
- 使用字符串衔接的方式
printf("Hello,"
"world!");
键盘录入
scanf()
函数用于接受来自键盘输入的字符,当运行到该函数时会等待用户输入字符,然后将字符赋值给除第一个参数以外的参数,函数原型是这样的scanf(control-string, item1, item2, ...)
int foo, bar;
scanf("%d %d", &foo, &bar);
占位符之间最好以空格分隔,以便于输入多次字符
提示
scanf()
会忽略空格、制表符、换行符
scanf 和 getchar 混合使用的问题
如果在getchar()
前使用了scanf()
,会留下一个换行符,要谨慎处理
getchar
getchar()
用于读取任何字符,包括空格、制表符、换行符,然后返回该字符的编码
putchar
putchar()
接受一个字符编码,并输出它
文件操作
- fopen
- fclose
- fread
- fwrite
字符串
必须引入string.h
头文件
- strcpy - 复制字符串
- strcmp - 比较字符串
- strlen - 返回字符串长度
数学
必须引入math.h
头文件
- ceil - 向上取整
- floor - 向下取整
- sqrt - 开平方根
- pow -
- abs - 返回绝对值