《 C Primer Plus》

第三章:

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');(清除残留字符) 若读取不完整,需循环读取剩余内容
相关推荐
LDR00612 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术12 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园12 小时前
C++20 Modules 模块详解
java·开发语言·spring
swordbob13 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享13 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.14 小时前
C语言--day30
c语言·开发语言
玖玥拾14 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..14 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽14 小时前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下14 小时前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php