D 入门指南/条件和循环/简单循环
D 中最简单的循环之一是while循环。只要其条件为真,该循环就会一直循环。这也使得while循环非常灵活 - 几乎任何类型的循环都可以写成while循环,如果你足够努力的话。一个while循环看起来像这样
while(condition)
{
//code goes here
}
该while循环将检查条件是否为真,如果为真,它将运行其中的代码。它将一直这样做,直到条件变为假。
如上一节所示,foreach循环对于循环遍历某种容器的内容非常有用。但是,当你不知道你有多少数据时该怎么办,比如当你从文件中读取数据时?一个while循环在这种情况下可以提供帮助。
import std.stdio;
import std.stream;
void main()
{
char[][] names;
File input = new File("names.txt");
while(input.eof() == false)
names ~= input.readLine();
writefln("Read ", names.length, " names.");
foreach(name; names)
writefln(name);
}
因此,这里我们创建一个名为names的字符串数组,用于保存我们将从文件中读取的姓名列表。然后我们创建一个File对象。记得在基本输入部分,我们使用din从控制台读取一行文本?din实际上是一种File对象,所以我们在这里做同样的事情,除了我们从磁盘上的文件读取而不是从用户那里读取。
这里重要的是while循环。让我们仔细看看它
while(input.eof() == false)
names ~= input.readLine();
条件是input.eof() == false. 该.eof()方法 ofFile表示“文件末尾”。所以我们将使用这个循环来读取数据,直到我们到达文件末尾。换句话说,我们将读取文件中所有的数据。循环体就是这么做的 - 它从文件中读取一行,并将它追加到我们的姓名列表的末尾。
在我们的程序结束时,我们使用熟悉的foreach循环输出姓名列表。
另一种非常类似的循环是do-while循环。在一个while循环中,条件位于循环的开头,但在一个do-while循环中,条件位于循环的末尾。之所以重要,是因为对于一个while循环,如果条件在第一次就为假,循环体将永远不会运行,所以while循环可以运行其主体0 次或多次。但是对于一个do-while循环,循环体将运行至少一次,然后再检查条件。do-while循环看起来像这样
do
{
code
} while(condition)
这种循环经常出现的一种情况是,当你试图从用户那里获取有效输入时。通常你会要求用户输入一些内容,然后你检查它是否有效,如果无效,你就会一直询问他们,直到他们给你一个好的内容。这就是do-while循环的用处:它将至少运行一次输入代码,并一直运行,直到条件满足。
import std.stdio;
import std.cstream;
void main()
{
bool valid = false;
bool yes;
do
{
writef("Delete all your data? y/n: ");
char[] response = din.readLine();
if(response.length > 0)
{
if(response[0] == 'y')
{
yes = true;
valid = true;
}
else if(response[0] == 'n')
{
yes = false;
valid = true;
}
}
} while(valid == false)
}
这段代码使用valid变量来跟踪用户输入的内容是否有效。一旦他们输入有效的内容,它将被设置为true. 然而,在那之前,do-while循环将一直循环,要求用户输入。