scanf函数(3)

2.占位符

scanf()常用的占位符如下(基本与printf函数一致):
1 %c:字符。

2 %d:整数。

3 %f:float类型浮点数。

4 %lf:double类型浮点数。

5 %Lf:long double类型浮点数。

5 %s:字符串。

6 %[]:在方括号中指定一组匹配的字符(比如%[0-9],遇到不在集合之中的字符,匹配将会停止。

上面所有占位符中,除了%c以外,都会自动忽略起首的空白字符%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空。

如果要强制跳过字符前的空白字符,可以写成scanf("%c",&ch),即%c前加上一个空格,表示跳过零个或多个空白字符。

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

因为%s不会包含空白字符,所以无法用来读取多个单词,除非多个%s一起使用,这也意味着,scanf()不适合读取包含空格的字符串,比如书名或歌名。另外,scanf()遇到%s占位符,会在字符串变量末尾储存一个\0.

scanf()将字符串读入字符数组时,不会检测字符串是否超过数组长度。所以,储存字符串时,很可能超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s占位符时,应该指定读入字符串的最长长度,即写成%[m]s,其中[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。

1 #include <stdio.h>

2 int mian()

3 {

4 char name[11];

5 scanf(”%10s",&name);

6 printf("%s\n",name)

7 return 0;

8 }

上面示例中,name是一个长度为11的字符数组,scanf()的占位符%10s表示最多读取用户输入的10个字符,后面输入的字符将被丢弃,这样就不会数组溢出的风险了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值