sofire 发表于 2013-2-4 22:50:06

writef和printf函数的学习程序

和C函数的格式相同。

只是printf和writef中的 s 意思不一样

不知道C语言中是否有用 * 号来表示宽度和精度。
D语言中,可以用*号来表示。它需要对应个数字,像 %d一样要对应一个数字。

("%*d", 5, 1)   相当于 ("%5d", 1)表示宽度
("%.*d", 5, 1)相当于 ("%.5d", 1) 表示精度

正好,char[] 表示的是长度和字符串。
和 %*s %.*s 吻合
所以可以用在printf函数中表示D语言的一个char[] 类型
不知道这2种形式有没有啥区别,但只是都能正常显示。

附上代码:

import std.stdio;import std.string;import std.c.string;class A{}void main(){    char[] str;    str = "abcde";    str ~= "\0";    printf("string(%d) '%s'\n", strlen(cast(char*)str), cast(char*)str);    writefln("string(%d) :%s", str.length, str);    str = "edcba";    printf("string(%d) '%s'\n", strlen(cast(char*)str), toStringz(str));    writefln("string(%d) :%s", str.length, str);    writefln("%s", str);    // 区别    printf("the string is '%.*s'\n", "aaaaaaaaaaaaa我");    printf("the string is '%*s'\n", "aaaaaaaaaaaaa我");    int a = 456;    printf("d: %d %05d %+d |%-5d| |%5d| |% d| |% d|"\n, a, a, a, a, a, a, -a);      // 十进制    writef("d: %d %05d %+d |%-5d| |%5d| |% d| |% d|"\n, a, a, a, a, a, a, -a);      // 十进制    printf("*: |%*d| |%-*d| |%.*d| |%*.d|"\n, 5, a, 5, a, 5, a, 5, a);    writef("*: |%*d| |%-*d| |%.*d| |%*.d|"\n, 5, a, 5, a, 5, a, 5, a);    printf("u: %u %05u %+u |%-5u| |%5u|"\n, a, a, a, a, a);      // 十进制无符号    //writef("u: %u %05u %+u |%-5u| |%5u|"\n, a, a, a, a, a);      // 十进制无符号    //    printf("o:%o %#o"\n, a, a);      // 八进制    writef("o:%o %#o"\n, a, a);      // 八进制    printf("x: %X %x %#x %#X %05x |%-5x|"\n, a, a, a, a, a, a);      // 十六进制    writef("x: %X %x %#x %#X %05x |%-5x|"\n, a, a, a, a, a, a);      // 十六进制    float f = 2.1, f2 = 2222222, f3 = 0.1111111111;    printf("f: %f |%.3f| |%5f| |%3.5f| |%5.3f|"\n, f, f2, f3, f, f);      // 浮点数    writef("f: %f |%.3f| |%5f| |%3.5f| |%5.3f|"\n, f, f2, f3, f, f);      // 浮点数    float e = 2.1, e2 = 2222222, e3 = 0.1111111111;    printf("e: %e |%.3e| |%5e| |%3.5e| |%5.3e|"\n, e, e2, e3, e, e);      // 指数    writef("e: %e |%.3e| |%5e| |%3.5e| |%5.3e|"\n, e, e2, e3, e, e);      // 指数    printf("g: %g |%.3g| |%5g| |%3.5g| |%5.3g|"\n, e, e2, e3, e, e);      // 十六进制    writef("g: %g |%.3g| |%5g| |%3.5g| |%5.3g|"\n, e, e2, e3, e, e);      // 十六进制    printf("a: %a |%.3a| |%5a| |%3.5a| |%5.3a|"\n, e, e2, e3, e, e);      // 不懂    writef("a: %a |%.3a| |%5a| |%3.5a| |%5.3a|"\n, e, e2, e3, e, e);      // 不懂    // * 号作为宽度标志和精度标志    printf("*: |%*f| |%-*f| |%.*f| |%*.f| |%*.*f|"\n, 5, e, 5, e, 5, e, 5, e, 8, 3, e);    writef("*: |%*f| |%-*f| |%.*f| |%*.f| |%*.*f|"\n, 5, e, 5, e, 5, e, 5, e, 8, 3, e);    A aa = new A;    int[] ab = ;    writef("s: %s %s %s %s %s %s", true, -10, -2.0001, "abc", aa, ab);}
页: [1]
查看完整版本: writef和printf函数的学习程序