scanf("%[A-B]",&a);中%[A-B]的意思是?

scanf("%[A-B]",&a);中%[A-B]的意思是?

匹配字符串, 但只能匹配由A或B组成的字符串,
*
比如ABAAC, a = "ABAA", 后面C被放弃,因为不在A-B的范围,
*
通常用于特定模式输入, 比如只能输入数字的字符串[0-9].

这是模式匹配,匹配你的输入中的A或者B

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/259662
  • 这篇博客也不错, 你可以看下解决scanf函数不安全问题
  • 你还可以看下c语言参考手册中的 c语言-scanf()
  • 除此之外, 这篇博客: c语言代码求解 —— scanf("%[^:]:%[^:]:%[^:\n]", a, b, c);中的 二、另外地,所有对%s起作用的控制都可以用%[ ]: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1、常用的总结如下:
    (1)%[0-9]表示只读入’0’到’9’之间的字符

    (2)%[a-zA-Z]表示只读入字母

    (3)%[^a-z]就表示读入小写字母之外的字符。 ^表示除XXX之外。

    (4)"%n[^=]" 读入"="号前的至多n 个字符

    (5)在符号前面加^,比如 “%[^:]” 就是除了冒号其他字符都可以输入,唯独忽略冒号,可输入的字符是除去冒号的字符集补集。
    '-'是范围连接符,当然也可以直接列出需要读入的字符。
    2、

    %c 一个单一的字符
    %d 一个十进制整数
    %i 一个整数
    %e, %f, %g 一个浮点数
    %o 一个八进制数
    %s 一个字符串
    %x 一个十六进制数
    %p 一个指针
    %n 一个等于读取字符数量的整数
    %u 一个无符号整数
    %[] 一个字符集
    %% 一个精度符号
    例如从键盘输入的"1235ab86"中读取1235、86给n。

    #include <stdio.h>
    int skip(){
        scanf("%*[^0-9]");   //跳过读入 除了0-9 的字符 
        return 1;
    }
    int main()
    {
        int n;
        while(skip()&&~scanf("%d",&n))  //再读入skip处理后的字符给n
    		printf("%d\n",n);
    	return 0;
    }
    

    //输出为:1235
    //86
    整数部分的高位有多余的0时,过滤0以获取不含0的整数

    #include <stdio.h>
    int str[100];
    int fun(){
    	scanf("%[^1-9]",&str);    //读入字符,如果遇到非1-9的字符,停止
    	return 1;
    }
    int main()
    {
    	while(fun()&&~scanf("%s",&str)){  //scanf再次读入经fun处理后的字符串,会覆盖fun读入的字符
    		puts(str);                    //这样可以达到删去不想要的字符的目的 		
    	} 
    	return 0;
    }
    

    //输入0000001234,56
    //输出1234,56
    根据第一例,也可使用跳过字符的方式获取

    #include <stdio.h>
    int str[100];
    int skip(){
    	scanf("%*[^1-9][^,]");    //跳过读入非1-9和非,的字符
    	return 1;
    }
    int main()
    {
    	while(skip()&&~scanf("%s",&str)){  //scanf再次读入经skip处理后的字符串
    		printf("%s",str);              //这样可以达到删去不想要的字符的目的 		
        //也可以在跳过读取后,scanf输入给int变量n而不是字符数组str,修改相应输入输出可灵活变换 
    	} 
    	return 0;
    }
     
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这是正则表达式