一、输入输出函数
头文件
#include <stdio.h> //标准输入输出
(一)scanf函数
1、格式
int scanf(const char *format, ...);
从键盘中获取格式为 format 的数据到指定的内存中
2、返回值
成功通过scanf获取到多少个数据
3、特点
scanf去获取数据并不是直接获取的,需要经过输入缓冲区;
如果scanf获取数据失败,他将会直接退出,不会继续卡(阻塞)在那里;
该函数获取数据的过程中,如果格式不对应,将会获取失败,并且不会将这个失败的数据清出输入缓冲区。
(二)ssanf函数
1、函数格式
int sscanf(const char *str, const char *format, ...);
从指定内存 str 中获取格式为 format 的数据到后面指定的内存中
2、示例
char buffer[1024]:
char name[20];
int id;
char sex[4];
int age;
float hight;
float weight;
sscanf( buffer, "%s %d %s %d %.2f, %.2f", name, id, sex, age, hight, weight);
(三)getchar函数
1、函数格式
int getchar(void);
从键盘中获取一个字符并将他返回出来
2、返回值
成功返回一个从键盘中(IO缓冲区中)获取的字符数据,若缓冲区中没有数据,则将会阻塞在那里;失败返回 EOF
(四)printf函数
1、函数格式
int printf(const char *format, ...);
将format所指定的数据打印到标准输出设备(终端)
2、参数
format:指定要打印的东西,可以编写字符串进去里面
format的格式
%d | 打印一个 int 数据 | %c | 打印一个字符 |
%o | 八进制打印一个 int 数据 | %f | 打印一个 float 数据 |
%x | 十六进制打印一个 int 数据 | %lf | 打印一个 double 数据 |
%hd | 打印一个 short 数据 | %llf | 打印一个 long double 数据 |
%hhd | 打印一个 char 型的整数数据 | %s | 打印一个字符串 |
%u | 打印一个 unsigned int 数据 | %10s | 打印长度为10的字符串(不满10则用空格在左边补齐,右对齐) |
%hu | 打印一个 unsigned short 数据 | %-10s | 打印长度为10的字符串(不满10则用空格在右边补齐,左对齐) |
%% | 打印一个“%” | %.2f | 打印到小数点后两位(一般%f 默认打印到小数点后六位) |
3、返回值
失败返回-1
4、示例
printf(“hello world\n”); //打印编写的字符串
printf(“数字位%d\n”, 123); //已指定格式的输出
...:代表是一个变参函数,参数根据format里面的内容来填充,像上一行的“123”
5、特点
printf不是将数据直接输出,需要经过输出缓冲区;
printf的缓冲区具备行缓冲特性,若打印的数据没有添加换行符,则不会立即打印,将会一直等到遇到'\n'或者是缓冲区满了才会输出(强制清除缓冲区)=>行缓冲特性
6、输出字体颜色
printf("\033[1;33m Hello world.\n");
\033[1;33m 清除文件格式
none | \033[0m | red | \033[0;31m |
black | \033[0;30m | light_red | \033[1;31m |
dark_gray | \033[1;30m | purple | \033[0;35m |
blue | \033[0;34m | light_purple | \033[1;35m |
light_blue | \033[1;34m | brown | \033[0;33m |
green | \033[0;32m | yellow | \033[1;33m |
light_green | \033[1;32m | light_gray | \033[0;37m |
cyan | \033[0;36m" | white | \033[1;37m |
light_cyan | \033[1;36m |
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41:红 31: 红
42:绿 32: 绿
43:黄 33: 黄
44:蓝 34: 蓝
45:紫 35: 紫
46:深绿 36: 深绿
47:白色 37: 白色
7、输出特效格式控制
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
(五)sprintf函数
1、函数格式
int sprintf(char *str, const char *format, ...);
将指定格式的字符串(format)输出到指定的内存(str)中
2、特点
具有自适应字符串的功能,结束标志是遇到'\0',因此有bug,除非 str 足够大或者提前计算好所需内存,否则可能会崩溃
(六)snprintf函数
1、函数格式
int snprintf(char *str, size_t size, const char *format, ...);
将指定大小(size)的格式的字符串(format)输出到指定的内存(str)中
2、特点
具有自适应字符串的功能,结束标志是遇到'\0';
只能拷贝指定大小 size 那么大到 str 中;
其中 size 的大小是包含了‘\0’的大小。
(七)字符串特点
所有的字符串即字符串的判断都必定是以'\0'结尾,若字符串中间夹杂'\0',遇到任何函数的分析,只要一遇到'\0',马上停止分析;
字符串的值就是其首个字符的地址,因此为 char*;
无法改变的常量;
结束位都要添加'\0'。
char *p = “string”; //用指针变量p记录其首地址,p指向的是一个常量
p = “world”; //毋问题
*p = ‘w’;//出错的,因为一开始*p记录的常量内存,不能更改
char array[ ] = “string”; //将字符串的数据拷贝到array数组当中,array代表是一个可变的内存
printf(“%s”, 字符内存);
(八)sizeof函数
sizeof(放任意类型或者变量);
sizeof用来测量括号里面的家伙的大小,返回一个无符号的长整型数据
sizeof(int);可以用来测量int型多大
sizeof(变量):用来测量变量有多大
sizeof(字符串):测量字符串所占内存大小多大
sizeof(地址/指针变量):得到系统位数
(九)strlen函数
1、函数格式
unsigned long strlen(char *string);
测量指定字符内存的字符个数
2、特点
一旦'\0'马上停止并且返回个数;
无论你是指针还是字符串都可以测量内存里面的字符个数。
二、类型转换
(一)隐式类型转换
1、赋值时,若左边的精度高于右边,右边会隐式类型转换配合左边
float num1 = 123; => 123.000000
2、赋值时,若右边的精度高于左边,有可能出现数据丢失,只保留左边的数据存储得到的数据
short num2 = 10000000000; //低精度向高精度挂靠
3、运算时, 当低精度数据类型与高精度数据类型进行运算时也会进行将低精度转化为高精度的隐式类型转换
1.0/2:先将2转化为浮点型数据再进行运算,最终得出0.5
(二)强制类型转换
强制改变变量或者是内存的分析方式
int a = -1;
(unsigned int)a;
将高精度数据转换成低精度数据用强制类型转换,但这样的转换方式可能导致数据的丢失或者数据异常(丢失一些精度),一般都是用强制类型转换去进行地址转换