您的位置:首页 > 编程语言 > C语言/C++

字符输入/输出函数的format

2017-08-14 17:06 851 查看
格式化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"); // ’*’表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言format
相关文章推荐