c 语言中 scanf 有什么作用,scanf 是 stdio.h 头文件里面的标准库函数,核心作用就是从键盘也就是标准输入设备读取用户输入的数据,按照格式控制符解析之后,存入指定变量内存当中,和 printf 输出函数成对使用,printf 负责把程序结果打印到屏幕,scanf 负责接收外部输入,实现程序和用户交互,是 c 语言入门必学函数,编程题绝大多数题目都需要使用 scanf 录入数据,使用关键点在于变量前面必须加取地址符 &,还有不同数据类型对应专属格式控制符,这两点是初学者最高频出错位置,理解 scanf 的读取原理,才能避开输入缓冲区残留、格式符不匹配这类经典坑,也是考试选择题编程题高频考点。
函数基础原型
int scanf (const char 格式控制字符串,地址列表)
函数有返回值,返回成功读取并且赋值的数据个数,读取失败返回 EOF 也就是负 1,日常练习一般不接收返回值,但是进阶题目会利用返回值判断输入是否合法。
不同类型对应的格式控制符对照表
| 数据类型 | 格式符 | 说明 |
|---|---|---|
| int 整数 | d | 读取十进制整数 |
| float 单精度浮点 | f | 读取单精度小数 |
| double 双精度浮点 | lf | 读取双精度小数 |
| char 单个字符 | c | 读取单个字符,包含空格回车 |
| 字符串字符数组 | s | 读取一串连续非空白字符 |
| 长整型 long | ld | 读取 long 类型整数 |
基础使用步骤
1 引入头文件,代码顶部添加 include
2 提前定义好用来存放输入数据的变量。
3 书写 scanf,括号里面先写格式控制字符串,后面依次填写变量的地址,普通变量前面加上 & 取地址符号。
4 程序运行的时候,等待用户在键盘输入内容,按下回车之后,scanf 开始解析输入内容,把数据写入对应变量。
5 读取完成之后,后续代码就可以使用这个变量参与运算。
深度重点知识
第一 取地址符 &,scanf 需要知道变量内存地址,才能把输入数据写进去,普通变量必须写 &,但是字符数组数组名本身就是首地址,不需要再加 &,很多初学者对字符串变量额外添加 &,属于常见错误。
第二 输入缓冲区,用户输入按下回车之后,数据先进入输入缓冲区,scanf 按照格式规则从缓冲区取数据,如果上一次 scanf 留下回车空格残留,下一次读取 char 类型的时候,会直接读取到残留回车字符,造成读取异常。
第三 格式匹配规则,格式控制字符串里面如果写普通字符,运行的时候用户输入也必须输入对应的字符,否则匹配失败,所以一般格式串里面不额外添加普通字符。
第四 返回值含义,scanf 成功读取几项,返回对应的数字,这个特性可以用来校验输入,比如输入不是数字,返回值不等于预期,程序可以提示输入错误。
第五 与 printf 区分,printf 输出不需要地址,scanf 输入必须地址,很多新手混淆两个函数,忘记写 &。
常见错误汇总
错误 1 普通变量前面漏掉 &,数据无法正确存入变量,程序运行异常。
错误 2 double 读取误用 f 格式符,正确应该是 lf,读取数值出错。
错误 3 char 类型读取没有处理缓冲区残留回车,下一次读取拿到空白字符。
错误 4 没有引入 stdio.h 头文件,编译器识别不到 scanf。
错误 5 格式控制符和变量类型不匹配,比如用 d 读取 double,数据错乱。
综合来说,c 语言中 scanf 有什么作用,就是实现键盘输入交互,把用户录入的数据按照格式解析存入变量,核心记住头文件 stdio h,普通变量加 &,不同类型匹配对应格式符,理解输入缓冲区原理,就可以正确使用 scanf 完成各类输入编程习题。
【常见问题】
问题 1 c 语言中 scanf 有什么作用,为什么变量前面要加 &
回答 1 c 语言中 scanf 有什么作用,它需要拿到变量内存地址才能写入数据,c 语言中 scanf 有什么作用对应的普通变量必须加 & 取地址符,把地址传给 scanf 函数,完成数据存储。
问题 2 c 语言中 scanf 有什么作用,double 读取用什么格式符
回答 1 c 语言中 scanf 有什么作用,读取 double 类型的时候格式控制符必须是 lf,c 语言中 scanf 有什么作用如果误用 f,会造成 double 数据读取错误。
问题 3 c 语言中 scanf 有什么作用,字符数组要不要加 &
回答 1 c 语言中 scanf 有什么作用,字符数组数组名本身就是首地址,c 语言中 scanf 有什么作用读取字符串的时候不需要额外添加 &,这是和普通变量重要区别。
【免责申明】
本文内容仅作为 c 语言编程基础知识科普,不同编译器对 scanf 输入解析细节存在细微差异,实际开发请参考对应 c 标准与编译器官方文档,本文不构成工程开发方案推荐。


