谈谈scanf的一些小用法

指定读取长度

        使用scanf可以指定读取输入字符的个数,例如:scanf(“%3d”,&n),当输入 12345 时,因为指定读取 3 位,所以 n=123 scanf(“%5s”,str),输入 nihaoya,str 要只会读取 nihao

匹配特定的字符

        因为在使用scanf的时候接收%s 会匹配接受所有字符,且遇到空格默认结束,有些时候我们只需要特定的 一些字符,例如,使用scanf读取hello word,但是实际上只能读取到hello,因为%s遇到空格就结束了,还有我们本来想输入一段英文,但是因为手误输入了一个数字,这个时候一般我们只能强行结束程序重新运行输入,九月刚学习C语言scanf的时候就经常这样,很烦恼。这时我们就可以使用%[XXX]来指定匹配我们需要的字符

        例如:scanf(“%[abcd]”,str),表示只接受 abcd4 个字符,例如输入 bcadacdfgad,则 str==“bcadacd“,还可以表示区间,例如 scanf(“%[0-9]”,str),表示只接受 0 到 9, scanf(“%[a-z]”,str),表示只接受小写子母,还可以 scanf(“%[0-9a-f]”,str)表示只接受 16 进制数,scanf(“%[a-zA-Z]”,str),表示只接受子母,还可以 scanf(“%[^\n]”,str),表 示遇到回车符从结束,scanf(“%[^A]”,str),表示遇到字符 A 才结束,scanf(“%[^0- 9]”,str),表示遇到数字才结束。

丢弃读取区字符

        scanf() 允许把读取到的数据直接丢弃,不往变量中存放,具体方法就是在 % 后 面加一个*,例如:scanf(“%*d”);,表示读取一个整数并丢弃,scanf(“%*[a-z]”);丢弃一 个小写子母,scanf(“%*[^\n]”),表示丢弃除了回车符以外的所有字符。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int n;
    char str[24];
    scanf("%*d %d",&n);
    scanf("%*[a-z]");
    scanf("%[^\n]",str);
    printf("n = %d  str = \"%s\"\n",n,str);
    return 0;
}

输出实例:

         对结果的分析:整数 100 被第一个 scanf() 中的%*d 读取后丢弃了,整数 999 被第%d 读取到,并赋值给 n。此时缓冲区中剩下 abcxyzABCXYZ,第二个 scanf() 将 abcxyz 读取并丢弃,剩下的 ABCXYZ 被最后一个 scanf() 读取到并赋值给 str

        学习了上面的知识,我们可以用 scanf(“%*[^\n]”);scanf(“%*c”);来清除缓冲区,原理是前面一个 scanf 用来清除除了回车符的所有字符串,后面一个 scanf 用来清除回车符。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值