标准C语言day12

复习:
1、输出缓冲区
满足哪些条件会刷新输出缓冲区:
1、遇到’\n’
2、遇到输入语句
3、缓冲区满4k
4、程序正常结束
5、fflush(stdout)
2、输入缓冲区
1、当想要输入的是整型、浮点型,但是缓冲区中有字符型,此时读取会失败,并且继续残留在缓冲区中影响后面的输入
解决:根据scanf返回值判断是否成功,失败的话清空输入缓冲区并重新输入
stdin->_IO_read_ptr = stdin->_IO_read_end;
2、使用fgets时,如果输入的字符超过size-1个时,超出部分会残留在输入缓冲区中,影响接下来的输入
解决:判断字符串的最后一个字符是否是’\n’,如果不是说明缓冲区中有残留
scanf(“%*[^\n]”);
scanf(“%*c”);
或者直接
stdin->_IO_read_ptr = stdin->_IO_read_end;
3、先输入整型或浮点型,然后再输入字符或字符串时,前一次可能会残留一个’\n’,会影响后面字符或字符串的输入
字符:
scanf(" %c",&ch);
字符串:
//scanf(“%d “,&num);
scanf(”%*c”);
gets(str);
3、常考的字符串处理函数
strlen\strcpy\strcat\strcmp
memcpy\memmove\memset\memcmp(按字节比较)
4、sprintf\sscanf
sprintf:把各种类型数据转换成字符串
sscanf:从字符串中解析各种类型的数据到变量中


通讯录项目:
姓名、性别、电话,最多存储50个联系人
功能:
1、添加新联系人
2、按名字删除联系人
3、按名字修改联系人
4、查找联系人,名字或电话,支持模糊查询
5、显示所有联系人信息
6、退出系统

预处理指令:
程序员所编写的代码不能被真正的编译器所编译,需要先经过一段程序翻译一下
翻译的过程称为预处理,负责翻译的程序称为预处理器,被翻译的语句叫做预处理指令,以#开头的都是预处理指令

查看预处理的结果:
    gcc -E code.c   把预处理的结果显示到终端
    gcc -E code.c -o code.i 把预处理的结果存储到.i预处理文件

预处理指令的分类:
#include 头文件导入(拷贝)
#include <> 从系统指定路径查找头文件
#include “” 从当前工作路径查找,找不到再从系统指定路径查找
-I path 可以指定要查找的路径path
还可以通过设置环境变量来指定路径

#define 定义宏
    宏常量:
        #define MAX 50
        优点:提高代码可扩展性、提高可读性、提高了安全性、还可以与case配合
        注意:定义宏常量不要加分号,一般宏名全部大写
        预定义好的宏常量:
            printf("%s\n",__func__);    获取函数名
            printf("%s\n",__FILE__);    获取文件名
            printf("%d\n",__LINE__);    获取行号
            printf("%s\n",__DATE__);    获取日期
            printf("%s\n",__TIME__);    获取时间
    宏函数:
        是带参数的宏
        不是真正意义的函数,没有发生传参,也没有返回值,也不会去检查参数的类型
        #define SUM(a,b) a+b
        1、先把在代码中出现了宏函数的位置,替换成宏函数后面的语句
        2、再把代码中使用的参数替换成调用者的参数
        注意:宏的内容必须保证在同一行,如果要换行,要在每一行的末尾添加续行符 \
    
    宏函数的二义性:
        由于宏函数代码位置、附近的值、参数各种原因的影响,会导致宏函数有不同的解释,这叫做宏的二义性
        如何避免宏的二义性:
            每个参数都加小括号,整体也叫小括号,不要在宏函数的参数中使用自变运算符

作业:实现一个交换两个变量值的宏函数,尽可能通用,能写几个,分析每一种的优劣
    a = a+b
    b = a - b
    a = a - b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值