09用d编程格式化输出
% 标志 宽 精度 格式符号
如writefln("项 %d:%9.02f", i + 1, items[i]);
d的格式与C类似.
格式符:b,x/X,o,d
,还有e,f,g,a
格式 限定
s
,默认
b
,二进制
d
,十进制
o
,八进制
x/X
,16进制
f/F
,标准10进制格式浮点计数
e
,科学计数
a
,16进制计数
g,G
,与e/f一样
()|,元素格式(开头/结尾/分隔)
%%
表单个’%'符
标志(可连用):
1,-
左对齐
2,+
打印正负号
3,#
可选方式打印
4,0
0零填充
5,空格
空格填充
int value = 12;
writefln("Binary : %b", value);
writefln("Octal : %o", value);
writefln("Hexadecimal: %x", value);
writefln("Decimal : %d", value);
e:按以下规则打印浮点参数:
小数点前的数,
精度非0,则小数点
小数点后的数,由精度决定,默认精度为6
e字符,表10的幂
-或+,由指数是否大于0决定.
指数至少包含两个数.
//及
double value = 123.456789;
writefln("with e: %e", value);
writefln("with f: %f", value);
writefln("with g: %g", value);
writefln("with a: %a", value);
E:与e相同,只是输出’E’
f/F:小数点前至少一个数字,默认精度是小数点后6位数
g:如果指数在-5与精度
之间,与f一样.其余与e一样.精度不指定小数点后位数
,而是整个值的有效位数
,如小数点后无有效位数
,则不打印小数点
.不打印小数点后最右边的0.
G与g一样,只是输出'E'与'F'
.
a:浮点参数按16进制格式打印:
前有0x
单个十六进制数
精度非0,则小数点
小数点后要求数,由精度决定,未指定精度,则尽量准确,
p,表2的幂
‘-’/’+’,由指数是否>0决定.
指数,至少包含1个数.0的指数为0.
A与a一样,但输出0X与P.
//及
bool b = true;
int i = 365;
double d = 9.87;
string s = "formatted";
auto o = File("test_file", "r");
int[] a = [ 2, 4, 6, 8 ];
writefln("bool : %s", b);
writefln("int : %s", i);
writefln("double: %s", d);
writefln("string: %s", s);
writefln("object: %s", o);
writefln("array : %s", a);
s的规则:
布尔,为真
/假
.
整:%d
浮:%g
utf8编码,
精度决定字节最大数,
构/类,按toString
返回值打印
数组按元素值,挨个打印
宽度
,如果宽度是负值,则假定为-
标志.如为*
,则按下个参数的值的宽度打印
int value = 100;
writefln("10符字段:%10s", value);
writefln("5 符字段:%5s", value);
精度,小数点后的数,如为星号,则从下个参数读(必须为整),忽略负精度
double value = 1234.56789;
writefln("%.8g", value);
writefln("%.3g", value);
writefln("%.8f", value);
writefln("%.3f", value);
//
auto number = 0.123456789;
writefln("Number: %.*g", 4, number);
//从下个参数来读.即4为精度.
int value = 123;
writefln("一般右对齐:|%10d|", value);
writefln("左对齐:|%-10d|", value);
writefln("负值:%+d", -50);
writefln("正值有+号: %+d", 50);
writefln("正值无+号: %d", 50);
#
号,按其他进制打印格式
o
,8进制,前为0
x
,16进制,前为0x
X
,16进制,前为0X
浮点
,都要打印小数点
g,G
,小数点后0都要打印
writefln("八进制0开头: %#o", 1000);
writefln("16进制0x开头: %#x", 1000);
writefln("10进制有小数点: %#g", 1f);
writefln("打印右边零:%#g", 1.2);
0:字段按0填充.
writefln("8符: %08d", 42);
空格符,空格填充
writefln("负值无效: % d", -34);
writefln("正值有空格:% d", 56);
writefln("正值无空格:%d", 56);
再加一个位置参数
% position$ flags width precision format_character
%数字$
表示第几个参数.
writefln("%1$d %1$x %1$o %1$b", 42);
auto format = (language == "en"
? "There are %1$s students in room %2$s."
: "在%2$s房间有%1$s个学生.");
writefln(format, count, room);
//交换顺序有时很有用的
格式化元素输出(相当于批量输出,对容器有效):
auto numbers = [ 1, 2, 3, 4 ];
writefln("%(%s%)", numbers);
%(
:开始.%)
结束.
writefln("%({%s},%)", numbers);
},
被视为分隔符,只在元素间打印,而不是所有在打印元素上.
writefln("%({%s}%|,%)", numbers);
%|
表示这不是分隔符,都要打印.,
就是分隔符,
d
语言特点,就是遇见问题,就+
东西,’+'语法.
auto vegetables = [ "spinach", "asparagus", "artichoke" ];
writefln("%(%s, %)", vegetables);
writefln("%-(%s, %)", vegetables);
串又不一样
.%-
不会出现串.
writefln("%(%s%)", "hello");
writefln("%-(%s%)", "hello");
%-
表无分隔符.
天书来了:
auto spelled = [ 1 : "one", 10 : "ten", 100 : "hundred" ];
writefln("%-(%s (%s)%|, %)", spelled);
格式到串.
import std.stdio;
import std.string;//这个模块里面的format
void main() {
write("你名字是? ");
auto name = strip(readln());
auto result = format("你好%s!", name);
}
还可以检查格式串
的问题
import std.stdio;
void main(){
writefln!"%s%s"(1); // 编译错误(额外%s)
writefln!"%s"(1,2);// 编译错误(额外2)
writefln!"%s%d"(1,2.5); //编译错误(不匹配的%d和2.5)
}
writef, writefln, formattedWrite, readf, formattedRead
这些函数都可以带格式串
作为参数,因而可以编译时检查格式串是否有问题.!
为模板实例符.
import std.stdio;
void main() {
write("姓: ");
string firstName;
readf(" %s\n", &firstName);//\n 在尾
write("名: ");
string lastName;
readf(" %s\n", &lastName);//\n在尾
write("年龄 : ");
int age;
readf(" %s", &age);
writefln("%s %s (%s)", firstName, lastName, age);
}
格式化输入.
整数
:d
:10进制,o
:8进制,x
:16进制
浮
:f,s
:根据变量类型读.c
读单个符
int number_d;
int number_o;
int number_x;
readf(" %d %o %x", &number_d, &number_o, &number_x);
writeln("用%d读: ", number_d);
writeln("用%o读: ", number_o);
writeln("用%x读: ", number_x);
都输入23
,但他们的值不一样.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现