• scanf格式控制符之%[]的应用


    考虑只读入小写字母的字符串,这个问题要如何用scanf解决呢?

    这就用到了%[] 这个格式控制符,它支持a-z这样的格式控制

    char s[111];
    scanf("%[a-z]", s);
    

    之前总是写成%[a-z]s

    当然这样会出现各种各样的问题,这里就不多说了。


    废话少说,多举一些例子来学习%[] 这个格式控制符吧。

    char s[111];
    scanf("%[b-d0-9]", s);//只读 bcd和数字 的字符串
    

    之前总是写成%[b-d|0-9]s 注意这里没有&|这样的运算。。。


    有聪明的读者应该会问这样的话,想减号-怎么办呢?

    char s[111];
    scanf("%[-b-d0-9]", s);//只读 bcd和数字和减号- 的字符串,下同
    scanf("%[b-d-0-9]", s);
    scanf("%[b-d0-9-]", s);
    

    这几个方法是一样的,注意其中减号的位置,原理是减号两边要同时有可见字符才可以被识别成区间,否则会被识别成减号。


    有了只读入某些字符,那么读入除了某些字符的字符串要怎么办呢。

    char s[111];
    scanf("[^b-d0-9]", s);//不读入 bcd和数字 其他字符都读入
    

    注意^一定要紧贴左括号,否则会被判断成^符号,这里^代表不读后面的字符。


    于是可以有不读入^字符

    char s[111];
    scanf("%[^
    ]", s);//不读入换号符,可以用这个来读一行字符,其中可以带空格
    scanf("%[^^]", s);//不读入 ^字符

    又有人会问 [ ] 要怎么去读入呢

    其中[就当做普通字符就行了,但是]在想读入]时一定要紧贴左括号,和^一样,在不想读入时要紧贴[^,看下正确的示范。

    char s[111];
    scanf("%[]a-z]", s);//读入 ] 和 a-z
    scanf("%[^]a-z]", s);//除了 ] 和 a-z 其他字符都读入
    

    还有想读入和不想读入两个不能同时使用,原因自己根据上面的想想就知道了^v^。

    由于笔者水平有限,若有错误,欢迎指出。

  • 相关阅读:
    关于C语言中类型的理解,有符号无符号的理解以及浮点数的理解
    关于集中注意力,情绪管理,记忆的总结整体
    关于链表逆置的问题
    git中reset和checkout的总结整理
    git中关于分支和stash的理解
    SVN和git的区别
    shell命令之find的用法
    (转载)获取服务器响应时间
    (转载)Spring定时任务的几种实现
    (转载)spring单例和多例详解。如何在单例中调用多例对象
  • 原文地址:https://www.cnblogs.com/hsuppr/p/6690930.html
Copyright © 2020-2023  润新知