<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Tcl 中的控制流 > 原文: [https://zetcode.com/lang/tcl/flowcontrol/](https://zetcode.com/lang/tcl/flowcontrol/) 在 Tcl 教程的這一部分中,我們將討論流控制。 我們將定義幾個命令,這些命令使我們能夠控制 Tcl 腳本的流程。 在 Tcl 語言中,有幾個命令可用于更改程序流程。 運行程序時,其命令從源文件的頂部到底部執行。 逐一。 可以通過特定命令更改此流程。 命令可以多次執行。 有些命令是有條件的。 僅在滿足特定條件時才執行它們。 ## `if`命令 `if`命令具有以下一般形式: ```tcl if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN? ``` `if`命令用于檢查表達式是否為真。 如果為真,則執行命令主體。 主體用花括號括起來。 `if`命令計算一個表達式。 該表達式必須返回一個布爾值。 在 Tcl 中,1,是,`true`表示`true`,0,`no`,`false`表示`false`。 ```tcl !/usr/bin/tclsh if yes { puts "This message is always shown" } ``` 在上面的示例中,始終執行由`{ }`字符包圍的主體。 ```tcl #!/usr/bin/tclsh if true then { puts "This message is always shown" } ``` `then`命令是可選的。 如果我們認為可以使用它,它將使代碼更加清晰。 我們可以使用`else`命令創建一個簡單的分支。 如果`if`命令后方括號內的表達式的計算結果為`false`,則將自動執行`else`命令后方的命令。 ```tcl #!/usr/bin/tclsh set sex female if {$sex == "male"} { puts "It is a boy" } else { puts "It is a girl" } ``` 我們有性別變量。 它具有`"female"`字符串。 布爾表達式的計算結果為`false`,我們在控制臺中得到`"It is a girl"`。 ```tcl $ ./girlboy.tcl It is a girl ``` 我們可以使用`elseif`命令創建多個分支。 僅當不滿足先前條件時,`elseif`命令才會測試其他條件。 請注意,我們可以在測試中使用多個`elseif`命令。 ```tcl #!/usr/bin/tclsh # nums.tcl puts -nonewline "Enter a number: " flush stdout set a [gets stdin] if {$a < 0} { puts "the number is negative" } elseif { $a == 0 } { puts "the numer is zero" } else { puts "the number is positive" } ``` 在上面的腳本中,我們提示您輸入一個值。 我們測試該值是否為負數或正數或等于零。 如果第一個表達式的計算結果為`false`,則對第二個表達式進行計算。 如果不滿足先前的條件,則將執行`else`命令之后的主體。 ```tcl $ ./nums.tcl Enter a number: 2 the number is positive $ ./nums.tcl Enter a number: 0 the numer is zero $ ./nums.tcl Enter a number: -3 the number is negative ``` 多次運行該示例。 ## `switch`命令 `switch`命令將其字符串參數與每個模式參數按順序進行匹配。 一旦找到與字符串匹配的模式,它就會通過將其遞歸傳遞給 Tcl 解釋器來求值以下主體參數,并返回該求值結果。 如果最后一個模式參數為默認值,則它匹配任何內容。 如果沒有任何模式參數與字符串匹配,并且沒有給出默認值,那么`switch`命令將返回一個空字符串。 ```tcl #!/usr/bin/tclsh # switch_cmd.tcl puts -nonewline "Select a top level domain name:" flush stdout gets stdin domain switch $domain { us { puts "United States" } de { puts Germany } sk { puts Slovakia } hu { puts Hungary } default { puts "unknown" } } ``` 在腳本中,我們提示您輸入域名。 有幾種選擇。 例如,如果該值等于我們,則將`"United States"`字符串打印到控制臺。 如果該值與任何給定值都不匹配,那么將執行默認主體,并將`unknown`打印到控制臺。 ```tcl $ ./switch_cmd.tcl Select a top level domain name:sk Slovakia ``` 我們已將`sk`字符串輸入到控制臺,該程序響應了斯洛伐克。 ## `while`命令 `while`命令是一個控制流命令,它允許根據給定的布爾條件重復執行代碼。 `while`命令在大括號括起來的塊內執行命令。 每次將表達式求值為`true`時都將執行命令。 ```tcl #!/usr/bin/tclsh # whileloop.tcl set i 0 set sum 0 while { $i < 10 } { incr i incr sum $i } puts $sum ``` 在代碼示例中,我們從一系列數字計算值的總和。 `while`循環包含三個部分:初始化,測試和更新。 該命令的每次執行都稱為一個循環。 ```tcl set i 0 ``` 我們啟動`i`變量。 它用作計數器。 ```tcl while { $i < 10 } { ... } ``` `while`命令后面大括號內的表達式是第二階段,即測試。 執行主體中的命令,直到表達式的計算結果為`false`。 ```tcl incr i ``` `while`循環的最后第三階段是更新。 計數器增加。 請注意,對`while`循環的不正確處理可能會導致循環不斷。 ## `for`命令 如果在啟動循環之前知道周期數,則可以使用`for`命令。 在此構造中,我們聲明一個計數器變量,該變量在每次循環重復期間都會自動增加或減少值。 ```tcl #!/usr/bin/tclsh for {set i 0} {$i < 10} {incr i} { puts $i } ``` 在此示例中,我們將數字`0..9`打印到控制臺。 ```tcl for {set i 0} {$i < 10} {incr i} { puts $i } ``` 分為三個階段。 首先,我們將計數器`i`初始化為零。 此階段僅完成一次。 接下來是條件。 如果滿足條件,則執行`for`塊中的命令。 然后進入第三階段; 計數器增加。 現在,我們重復階段 2 和 3,直到不滿足條件并留下`for`循環。 在我們的情況下,當計數器`i`等于 10 時,`for`循環停止執行。 ```tcl $ ./forloop.tcl 0 1 2 3 4 5 6 7 8 9 ``` 在這里,我們看到`forloop.tcl`腳本的輸出。 ## `foreach`命令 `foreach`命令簡化了遍歷數據集合的過程。 它沒有明確的計數器。 它逐個元素地遍歷一個列表,并且當前值被復制到構造中定義的變量中。 ```tcl #!/usr/bin/tclsh set planets { Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune } foreach planet $planets { puts $planet } ``` 在此示例中,我們使用`foreach`命令瀏覽行星列表。 ```tcl foreach planet $planets { puts $planet } ``` `foreach`命令的用法很簡單。 `planets`是我們迭代的列表。 `planet`是具有列表中當前值的臨時變量。 `foreach`命令遍歷所有行星并將其打印到控制臺。 ```tcl $ ./planets.tcl Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune ``` 運行上面的 Tcl 腳本將給出此輸出。 ```tcl #!/usr/bin/tclsh set actresses { Rachel Weiss Scarlett Johansson Jessica Alba \ Marion Cotillard Jennifer Connelly} foreach {first second} $actresses { puts "$first $second" } ``` 在此腳本中,我們迭代列表的值對。 ```tcl foreach {first second} $actresses { puts "$first $second" } ``` 我們在每次迭代時從列表中選擇兩個值。 ```tcl $ ./actresses.tcl Rachel Weiss Scarlett Johansson Jessica Alba Marion Cotillard Jennifer Connelly ``` 這是`actresses.tcl`腳本的輸出。 ```tcl #!/usr/bin/tclsh foreach i { one two three } item {car coins rocks} { puts "$i $item" } ``` 我們可以并行遍歷兩個列表。 ```tcl $ ./parallel.tcl one car two coins three rocks ``` 這是`parallel.tcl`腳本的輸出。 ## `break`和`continue`命令 `break`命令可用于終止由`while`,`for`或`switch`命令定義的塊。 ```tcl #!/usr/bin/tclsh while true { set r [expr 1 + round(rand()*30)] puts -nonewline "$r " if {$r == 22} { break } } puts "" ``` 我們定義了一個無限的`while`循環。 我們使用`break`命令退出此循環。 我們從 1 到 30 中選擇一個隨機值并打印出來。 如果該值等于 22,則結束無窮`while`循環。 ```tcl set r [expr 1 + round(rand()*30)] ``` 在這里,我們計算出 1..30 之間的隨機數。 `rand()`是內置的 Tcl 過程。 它返回一個從 0 到 0.99999 的隨機數。 `rand()*30`返回 0 到 29.99999 之間的隨機數。 `round()`過程將最終數字四舍五入。 ```tcl $ ./breakcommand.tcl 28 20 8 8 12 22 ``` 我們可能會得到這樣的東西。 `continue`命令用于跳過循環的一部分,并繼續循環的下一個迭代。 可以與`for`和`while`命令結合使用。 在下面的示例中,我們將打印一個數字列表,這些數字不能除以 2 而沒有余數。 ```tcl #!/usr/bin/tclsh set num 0 while { $num < 100 } { incr num if {$num % 2 == 0} { continue } puts "$num " } puts "" ``` 我們使用`while`循環遍歷數字`1..99`。 ```tcl if {$num % 2 == 0} { continue } ``` 如果表達式`num % 2`返回 0,則所討論的數字可以除以 2。執行`continue`命令,并跳過循環的其余部分。 在我們的情況下,循環的最后一個命令將被跳過,并且數字不會打印到控制臺。 下一個迭代開始。 在 Tcl 教程的這一部分中,我們正在討論控制流結構。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看