考虑只读入小写字母的字符串,这个问题要如何用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^。
由于笔者水平有限,若有错误,欢迎指出。