scanf函数的使用

scanf函数的介绍



前言

scanf函数是C语言标准的输入语句,它与printf函数语法类似。本文详细讨论一下scanf函数的各种用法和一些注意点。

一、基本用法

  1. scanf函数用于读取用户的键盘输入并赋值给变量,当程序运行到这里是会停下并等待用户输入再继续执行程序。原理是将用户输入的放入缓存,编译器再按照占位符对数据进行解读。
  2. scanf里面包含这些参数:首先是告诉编译器数据类型的占位符;然后是相对应的变量,这些变量前需要加上取地址符&,以表示将值赋给这个变量。
    因为scanf函数传递的是地址,所以指针变量不需要加&(如字符串变量)
  3. scanf函数的读取是严格按照对应的占位符读取的,它会从头读取输入的数据直至第一个不符合的数据类型并停下,然后将该类型赋给第一个变量。
  4. 用户输入数据后按下回车键,编译器开始读取,如果类型符合将会赋值,用户接着按下回车键将开始下一个数据的读取

scanf函数的返回值和占位符

  • 返回值
  1. 对于scanf这个函数,C语言里规定它的返回值是int类型的,即整数。scanf函数在运行完之后会返回一个整数值,这个值其实是scanf函数成功读取到的数据个数。
    如果定义一个变量

int a = scanf(“%d”,&c,&b)
printf(“%d”,a)

这时候如果打印c的值,如果成功读取c,a的值就是1,成功读取b和c,a的值就是2

  1. 如果成功读取任何数据之前就发生读取错误或者读到了文本末尾,通常返回常量EOF(-1)
    EOF即end of file 是文件结束标志
  • 占位符
    scanf的语法和printf相似,占位符也基本一致,如下
    • %c :字符。
    • %d :整数。
    • %f : float 类型浮点数。
    • %lf : double 类型浮点数。
    • %Lf : long double 类型浮点数。
    • %s :字符串。
    • %[ ]:在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。
    上面所有占位符之中,除了 %c 以外,都会自动忽略起首的空白字符。 %c 不忽略空白字符,总是返回当前第⼀个字符,无论该字符是否为空格
    scanf函数在处理占位符时,会自动过滤掉空白字符并将数据对应,但%c存在的话,就会读取空格。如果要强制跳过字符前的空⽩字符,可以写成

    scanf(" %c", &ch)

    即 %c 前加上⼀个空格,表⽰跳过零个或多个空⽩字符。
    特别说一下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。如果要一直读取可以写成"%[^\n ]s",它代表一直读取知道遇到\n,即换行操作。

函数的一些注意点

  • scanf函数将字符串读入字符数组时,不会检测是否超过了数组的长度,所以储存时很有可能会超过数组的长度,这就带来了不可预测的程序安全问题,此时最好在使用%s是写成%[m]s,其中的[m]就是一个整数,表示读入的最大长度,此后的数据将被丢弃。
  • scanf函数在遇到%s是会在字符串末尾自动加入一个\0,同时算一个字符占一个位置。所以有时候一个数组并不能正确存入那么多数据
  • scanf如果要实现多次输入或输入多个变量的话,可以放在循环中,如

while(scanf(“%d”,&a,&b) !==2 )

如果想要程序终止,可以直接输入CTRL+Z回车,但是VS环境下需要输入三次
上述循环也应用了scanf函数的返回值,表示需要读取到正确的数据个数,才会进行循环,防止输入错误的数据类型。

  • 用户在使用时可能不符合预定的格式。在这里插入图片描述
    像这样如果输入2024 11 25,也许会导致解读失败,所以scanf里有一个赋值忽略符“ * ”,只要吧这个独好加在任何占位符的百分号后面,该占位符就不会返回任何值

** 补充 **
因为scanf函数是不安全的,所以在VS环境下会报警导致不能使用,有一个解决办法是在文件的第一行补上:
#define _CRT_SECURE_NO_WARNINGS
如果要一劳永逸,就在电脑里找到newC++files.cpp这个文件,复制到桌面,用记事本打开,再加上这一行保存,再放回到原路径即可

这是第一次发自己的学习笔记,本人也是小白,有什么不完善的各位大佬体谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值