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迴圈將一直迴圈,要求使用者輸入。