scanf
int scanf(const char* format,...);
// scanf详解
- scanf本质上是一个模式匹配函数,试图将输入的字符与控制格式匹配
- 处理过程:从左到右依次处理转换说明
- 若处理成功,继续处理后续转换说明
- 若处理失败,则返回当前已经正确处理的转换说明个数。即变量个数
- 终止scanf输入的方式
- 遇到空格、制表符、换行符时会结束输入
- 当指定了宽度,读取到指定宽度时会结束输入
- 特点:
- scanf的作用是:读取一个单词,因为遇到空格会结束输入
- scanf是一个危险的函数:scnaf("%s",str);
- 假设str为一个数组,有10个字符空间,当输入超过10个字符时,仍会往后续地址存入字符
- 当我们不知道str内存空间大小时,就容易发生溢出
- scanf是行缓冲函数:
- 做scanf函数时,scanf会检测输入缓冲区buf是否为空,
- 若buf为空,则scanf会阻塞,等待输入,若buf不为空,scanf会从buf读取数据
- 若buf中数据与scanf的控制格式不匹配,scanf亦会阻塞,等待输入
- 以%d格式读取数据时,会跳过空格,换行,TAB这些空白字符
- 以%c格式读取数据时,不会跳过任何字符
- 以%s格式读取数据时,遇到空格会结束读取
fscanf
- 定义:
int fscanf(FILE* fp,const char* fornat,...);
- 功能:以scanf的方式,从指定文件中读取数据流
- 返回值:返回事实上已赋值的变量的数,未进行斜休分配则返回EOF