字符输入/输出函数的format

格式化format
输出:%[flags][width][.precision][length] specifer
输入:%[*][width][length]specifier


flags:(输出)
     -           左对齐,默认右对齐
    +           正数显示+,负数显示-
    #           %#x或%#X按照十六进制0x+数值或者0X+数值形式输出,%#o按照八进制0+数值形式输出
    0           数值宽度小于width参数时左侧补0


width:(输入/输出)
    作为输入函数时:表示最多接收多少字符(小数点也算一个字节)。
    作为输出函数时:表示最少输出多少字符,原数值字符个数小于width时按照对齐方式补0或空格,
        原数值字符个数大于width时原样输出。限制小数时小数点也算一个字符。


.precision精确度:(输出)
    .number:用在d、i、u、x、X、o类型,当数值字符个数小于number时前置补0。
                  用在e、E、f、F类型,表示小数点后面有几位数。
                  用在g、G类型表示有效数字(左侧第一个非0数字开始)最大宽度(不包括小数点)
                  用在s类型表示最多输出多少字符


specifer分隔符(输入/输出)
    %d or %i    符号类型signed十进制整数,作输入函数时%i还可以接收八进制、十六进制数
    %u             无符号类型unsigned十进制整数,作输入函数时%i还可以接收八进制、十六进制数
    %o             八进制
    %x             小写十六进制
    %X             大写十六进制
    %f or %F    浮点数
    %e             科学计数法1.2e+3 == 1200
    %E             科学计数法1.2E-3 == 0.0012
    %g             使用最短小数表示法%f 或者 %e
    %G            使用最短小数表示法%F 或者 %E
    %c             字符
    %s             字符串
    %p             指针地址    
    %%            %          输出函数打印%,输入函数匹配'%'
    %n
        // 作为输入函数%n不作为一个输入参数,它记录用户输入了多少有效字符,不会影响scanf返回值
            scanf("%c%n", &ch, &count); 无论输入多少字符count都等于1,因为%c只接收1个字符
            scanf("%d%n", &iv, &count);输入1结束后count等于1,输入12结束后count=2
            scanf("%c %c %c%n", &ch, &ch1, &ch2, &count); 输入abc结束count=3;输入a b c结束count=5,空格也计数。
        // 作为输出函数记录从开始位置到%n输出了多少字符,不会影响printf返回值
           printf("i=%d, j=%d/n%n", i, j, &k);
           在i=343、j=123的情况下,k=12。
    %[]         输入
        []组成扫描列表,从输入数据获得符合扫描成员的数据直到遇到不符合扫描成员结束。
            char arr[15];
            scanf("%[abcd]",arr); "abcd"组成扫描成员,输入"cbdeaf",arr="cbd","eaf"依然留在缓冲区,下文讲解清空缓冲去的方法。
            scanf("%[][abc]"); "][abc"组成扫描成员。
            scanf("%[[]abc]"); "[]abc"不能组成扫描成员,"]"只能紧跟"^"或"["才能组成扫描成员。
    %[^]        输入
        [^]组成扫描列表,从输入数据获得扫描成员以外的数据直到遇到符合扫描成员结束。
           char arr[15];
           scanf("%[^123]", arr); 识别123以外的数或字母
              输入abc4561,arr="abc456","1"留在缓冲区
           scanf("%[^][123]"); "][123"以外的字符串


        大多数编译器支持scanf("%[a-zA-Z]");中的"-"表示只接收26个字母,少数编译器把"-"理解成减号。(需要个人测试)


清空缓冲区:

    使用scanf("%*[^\n]%*c"); // ’*’表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参数。




猜你喜欢

转载自blog.csdn.net/u010196624/article/details/77163885