第三章:

2.
3.
4.




第四章:字符串和格式化输入输出
1.char类型数组和null字符

2.转换说明(%d等)和printf和scanf
2.1转换说明



2.2转换说明 修饰符(修饰转换说明的)
比如 %.2f,就是小数点后保留两个小数。这个.2就是修饰

补充sizeof和其返回值类型size_t和转换说明符%zu


sizeof和strlen都必须用size_t 进行转换,以及用%zu进行修饰
2.3printf

2.4scanf
返回的是读取成功的个数!!!

scanf返回的是个数,它已经把读到的内容写进地址对应的内存里面了。

当明确输入只有一个的时候,对于scanf,不管是%d, %s, %c,都只会读前面的第一个部分,后面的会断开读不到。scanf("%d", &num);输入:123 45,得到的是123 ; scanf("%c", &ch);输入:ab c,得到的是a.
此外注意,scanf只有%s的时候,不需要取地址
3.字符串和字符

4.const(和define的关系待补充)

但是具体和define的关系,搜了,没看懂。待后续补充
5.明示常量 limits.h和float.h头文件自带



第五章:运算符、表达式和语句
1.整数和浮点数计算
不管加减乘除,整数结果是整数,浮点数结果是浮点数,整数和浮点数或者浮点数和整数,不管加减乘除都是浮点数。
注意下面这个截断,不是四舍五入,而是直接不要小数部分。


2.取模

6.while语句
6.1表示真

6.2选择哪个循环方法

6.3数组
数组可以有多种类型

字符串存在char类型的数组里面,char类型的数组如果以\0结尾那么就是字符串

7.C控制语句:分支和跳转
7.1scanf\getchar\fgets
对比维度 | getchar() | scanf() | fgets() |
---|---|---|---|
函数原型 | int getchar(void); |
int scanf(const char *format, ...); |
char *fgets(char *str, int n, FILE *stream); |
读取单位 | 单个字符(包括空白字符) | 按格式字符串解析的若干数据(如整数、字符串等) | 一整行数据(包括空格、回车等所有字符) |
返回值 | 成功:读取字符的 ASCII 码(int 类型) 失败 / 文件结束:EOF |
成功:成功赋值的变量个数 失败 / 文件结束:EOF |
成功:指向接收缓冲区的指针 失败 / 文件结束:NULL |
处理空白字符 | 不忽略任何空白字符(空格、回车、Tab 均会被读取) | 1. 读取非字符串格式(%d /%f 等):自动跳过开头空白字符 2. 读取字符串(%s ):跳过开头空白,遇空白则停止 |
不忽略任何空白字符,会将回车 \n 作为行的一部分读入 |
缓冲区处理 | 从标准输入缓冲区读取单个字符,不残留未处理字符(除非手动控制) | 未匹配的字符(包括回车)会残留在输入缓冲区,可能影响后续输入 | 读取到换行符或达到长度上限时停止,剩余字符留在缓冲区 |
字符串读取限制 | 不直接支持字符串读取(需循环调用拼接) | 用 %s 读取时,无长度限制,遇空白停止(无法读带空格的字符串) |
第二个参数 n 限制最大读取长度(含 \0 ),可读取带空格的完整行 |
安全性 | 高(每次只处理 1 个字符,无溢出风险) | 低(%s 无长度限制,易导致缓冲区溢出) |
高(通过 n 控制长度,可避免溢出) |
典型使用场景 | 1. 读取单个字符(如菜单选择 'Y/N') 2. 清空输入缓冲区 3. 逐字符处理输入 | 1. 读取结构化数据(如 10 3.14 hello ) 2. 简单的无空格输入场景 |
1. 读取带空格的完整行(如用户输入的句子) 2. 读取配置文件中的一行内容 3. 需要安全处理输入的场景 |
示例代码 | char c = getchar(); |
int a; char s[10]; scanf("%d %s", &a, s); |
char buf[100]; fgets(buf, 100, stdin); |
常见问题 | 连续调用时会读取到回车等空白字符 | 1. 残留回车导致后续输入异常 2. %s 无法读取带空格的字符串 |
读取的内容包含回车符,需手动处理(如替换为 \0 ) |
清空缓冲区方法 | 无需额外处理(每次读取 1 个字符) | while(getchar() != '\n'); (清除残留字符) |
若读取不完整,需循环读取剩余内容 |
