输出缓冲区
当使用printf/puts/putchar等函数显示数据时,并不会直接显示在屏幕上,而是先放入的输出缓冲区中(提高程序的运行效率),当满足一些条件时才会显示在屏幕上:
1、遇到\n
2、从输出转换到输入状态
3、程序结束
4、当缓冲区满4k
5、手动刷新 fflush(stdout);
输入缓冲区:
在终端输入的数据会先存储在输入缓冲区中,然后再根据占位解析成对应的数据,如果前一次输入的数据有残留的垃圾,会影响后续数据的输入。
1、输入字符时前一次的输入会残留一个空格或’\n’,解决方法就在%c前加一个空格。
2、如果输入时有若干个垃圾数据,会影响后续所有数据的输入。
1、使用正则表达式,注意:必须确定有垃圾数据时再使用。
scanf("%*[^\n]"); // *从缓冲中获取数据但不存储到变量中
scanf("%*c");
2、设置缓冲区中的位置指针
stdin->_IO_read_ptr 开始位置
stdin->_IO_read_end 结束位置
stdin->_IO_read_ptr = stdin->_IO_read_end;
自定义函数
1、方便管理代码,编写程序时思路清晰。
2、代码复用,同一段代码可以不同位置多次执行。
函数声明
返回值类型 函数名(类型 变量名,类型 变量名,…);
1、一般根据函数的功能来取函数名,全部小写单词之间用下划线分隔。
2、参数的个数、类型由函数的功能所需要的数据决定,被调用时由调用者提供,如果不需要则写void,不要空着。
3、返回值类型根据函数的结果类型决定,如果没有返回值则写void。
4、如果函数的定义出现在调用之前,声明可以省略。
5、函数声明时,参数的变量名可以省略。
6、如果不写返回值类型,则默认为int类型返回值。
函数定义
返回值类型 函数名(类型 变量名,类型 变量名,...)
{
函数体;
return 数据;
}
函数的调用
函数(数据1,数据2…);
返回值会在函数执行完成后放置在调用位置,处理方式:
1、存储到变量中,长期使用。
2、立即使用,可以显示或参与运算。
函数之间参数的传递(值传递)
1、调用者向被调用者传递,由实参向形参传递。
函数中的命名空间都相互独立的,函数中的变量名可以重名。
函数在调用时,其实是把实参给形参赋值。
函数之间不能通过传递来共享变量。
数组当作函数的参数时,长度会丢失,需要额外添加一个参数来传递它的长度。
2、被调用者向调用者传递,使用return返回数据。
不写return语句也会有返回人值。
调用者和被调用者会约定一个空间用于存储返回值,return语句的功能就把一个数据存储到这个空间,如果不写return语句,调用者就会得到一个默认值(不确定)。