【发布时间】:2014-09-14 21:38:19
【问题描述】:
这是官方D书的一个例子:
import std.stdio;
import std.string;
void main()
{
File file = File("student_records", "w");
file.writeln("Name : ", "Zafer");
file.writeln("Number: ", 123);
file.writeln("Class : ", "1A");
file.close();
File file1 = File("student_records", "r");
while (!file1.eof()) {
string line = (chomp(file1.readln()));
writeln("read line -> |", line);
}
}
如果你运行它,你会得到:
ldc2 -run file.d
read line -> |Name : Zafer
read line -> |Number: 123
read line -> |Class : 1A
read line -> |
请注意打印了一个空行。现在如果我把第三个 writeln 改成 write,
import std.stdio;
import std.string;
void main()
{
File file = File("student_records", "w");
file.writeln("Name : ", "Zafer");
file.writeln("Number: ", 123);
file.write("Class : ", "1A");
file.close();
File file1 = File("student_records", "r");
while (!file1.eof()) {
string line = (chomp(file1.readln()));
writeln("read line -> |", line);
}
}
那么最后一个空行就不再打印了:
ldc2 -run file.d
read line -> |Name : Zafer
read line -> |Number: 123
read line -> |Class : 1A
我想知道为什么这会有所不同:无论如何,readln 都应该读到包括行终止符号在内的行尾,为什么当我们显然已经达到 EOF 时还要有一个额外的循环?
【问题讨论】: