首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Scanf的一些重要知识点

Scanf的一些重要知识点

作者头像
草莓熊Lotso
发布2025-10-29 13:10:57
发布2025-10-29 13:10:57
930
举报
文章被收录于专栏:C++/LinuxC++/Linux

往期回顾:

printf的部分知识点分享

C语言常见概念及数据类型和变量的一些重要知识点

一.基本用法

---scanf()函数用于读取用户的键盘输入。程序运行到这里时会停下来。等待用户从键盘输入;用户输入数据,按下回车键后,它就会处理用户输入,将其存入变量。

---scanf()和printf()的语法相似。

注意:变量前面必须加上&运算符(指针变量除外),因为scanf()传递的不是值而是地址。如果这里的变量是指针变量(比如字符串变量),那就不用加&运算符,数组前一般也不用。

二.scanf 的返回值

---scanf()的返回值是一个整数,表示成功读取变量的个数,如果没有读取任何项或者匹配失败,则返回0;如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)--end of file 文件结束标志。

---在vs环境中,连按三次 CTRL+Z,可以提前结束输入

三.占位符

---scanf()和printf()的占位符基本一致,下图中是几个常用的;

---上面所有占位符中,除了%c以外,都会自动忽略起首的空白字符,%c不忽略空白字符,总是返回当前第一个字符,无论该字符是不是空格字符(如图1),如果要强制跳过字符前的空白字符,可以在c前加一个空格(即% c),表示跳过0个或多个空白字符(如图2)。

图1~

图2~

--还需要特别说明一下占位符%s,它其实不能简单的等于字符串,它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格,换行符,制表符等)为止。

因为%s不会包含空白字符,所以无法用来读取多个单词,除非几个%s一起用或者用%[^\n]s,这也意味着,scanf()不适合读取可能包含空格的字符串,比如书名或者歌曲名。还有一点,scanf()遇到%s占位符,会在字符串变量末尾存储一个空字符\0。

注意:scanf()将字符串读入字符数组时,不会检测字符是否超过了数组长度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s占位符时,应该指定读入字符串的最长长度,即写成%[m]s,超出指定最长长度的字符将被丢弃,这样就不会有数组溢出的风险了。另外,需要注意一下\0也算一个字符。

如图所示:

四.赋值忽略符

--有时,我们的输入可能不符合预定的格式。如下图所示,如果用户输入2025-04-07,会正确的解读出来,但如果用户输入其他格式,就会解读失败。

为了避免这种情况,scanf提供了一个赋值忽略符 *,比如%*c。只要吧*号加到任何百分号后面,该占位符就不会返回值,解析后被丢弃。我们直接通过一个例子来感受一下吧,就拿上面的这个例子来试试~

结语;感谢大家的支持,欢迎在评论区底下留言讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.基本用法
  • 二.scanf 的返回值
  • 三.占位符
  • 四.赋值忽略符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档