博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

输入函数-scanf族函数

Posted on 2023-03-13 05:58  乔55  阅读(18)  评论(0编辑  收藏  举报

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