VBS基礎編程教程 (第4篇)_vbs

來源:互聯網
上載者:User
四篇(共六篇): 
大家好, 昨天我休息了一天, 所以今天寫第4章:迴圈結構 

  我們先來看一道題:商場進行每日結算, 要求累加出今天的營業額, 每次輸入一個數, 這道題其實很簡單, 但就我們現在學 

過的知識要完成這道題相當麻煩, 我們來分析一下. 首先, 我們需要知道買賣的次數, 這樣才能控制輸入的次數,但是, 這種設 

計是非常低效的, 每天都要重新設計程式. 假定今天進行了5次交易, 以下是來源程式: 

dim sum 
sum=0 '初始設定變數 
sum=sum + int(inputbox("請輸入交易額")) 
'sum=sum+x 這種形式是把本身的值取出來, 進行一次運算, 再放回本身, 這種方法很有用處 
'這裡使用了函數嵌套, 把inputbox的傳回值直接傳給int函數, 轉化成整數, 下同 
sum=sum + int(inputbox("請輸入交易額")) 
sum=sum + int(inputbox("請輸入交易額")) 
sum=sum + int(inputbox("請輸入交易額")) 
sum=sum + int(inputbox("請輸入交易額")) 
msgbox(sum) 

  看到了嗎, 我通過把計算過程複製了5遍才設計好了程式, 這種程式在汽車證券交易所等交易次數少的地方還能湊合著用, 如果 

放到超市豈不是要複製, 粘貼幾千遍? 我們今天講的內容就可以克服這種缺陷, 首先, 我們來講以下Do...Loop語句. 

  do...loop的結構看上去非常簡單, 就是:do...loop, 僅此而已, 這個結構不斷執行do和loop之間的語句(學名叫:迴圈體), 
永不停止. 舉個例子來說: 

do 
    msgbox("這個資訊會不斷重複出現, 要停止程式請使用工作管理員(Ctrl+Alt+Del)中止wscript進程") 
loop 

  運行這個程式, 當你點銷掉一個對話方塊馬上會出來另一個, 你永遠點不完, 總有下一個. 誰會運行這樣的程式? 除非是給 

別人搗亂(我就幹過這種事), 所以在do..loop結構中還有一個語句:exit do, 這個語句將終止迴圈, 跳到loop後面的語句繼續 

執行. 據個例子來說: 

dim a '注意:常量不需要在dim裡面聲明,否則會引發錯誤 
const pass="123456" '這是一個字串 請用""包裹起來. 設定密碼為常量, 不可變更 
do 
    a=inputbox("請輸入密碼") 
    if a=pass then 
         msgbox("密碼校正成功") 
         exit do 
    end if 
loop 

  這個程式會一直不停的問你密碼, 知道你輸入了正確的密碼為止.(if可以嵌套在另一個if當中, 也可以嵌套在迴圈體當中 

, 所以一定要用縮排, 來分清楚程式的各個部分). 這個程式是很經典的, 早期的程式都是這麼做的. 但是我們是Hacker, 所以 

我們瞭解系統的安全性, 這種無限次認證程式很容易被窮舉破解, 我們要來限定認證的次數. 修改程式如下 

dim a,ctr 
ctr=0 '設定計數器 
const pass="pas123_" '上面的那個是弱密碼, 這次改的強一點 
do 
    if ctr=3 then 
        msgbox("已經達到認證上限, 認證程式關閉") 
        exit do 
    else 
        a=inputbox("請輸入密碼") 
        if a=pass then 
            msgbox("認證成功") 
            msgbox("(你可以在這裡加一段成功後得到的資訊)") 
            exit do 
        else 
            ctr=ctr+1 '如果密碼出錯就增加一次錯誤認證計數 
            msgbox("認證出錯, 請檢查密碼") 
        end if 
     end if 
loop 

  運行這個程式試試看, 當你出了3此錯誤以後, 就會停止再次詢問密碼, 關閉程式. telnet認證用來限制次數的程式與此大 

同小異. 要注意的是嵌套的if語句, 清仔細讀一下這個程式, 可能比較難懂, 也請你試著自己設計一下類似的程式. 

  其實, 要在do...loop加上驗證的功能, 並不一定要用if, 我們可以直接利用do. 我來介紹一下while關鍵字, while可以放 
在do或者是loop後面, 然後再接一個運算式, 當運算式的值為true的時候(運算式成立),才運行迴圈體.我們來看一下修改後的 
程式" 

dim a,ctr 
ctr=0 
const pass="pas123_" 
do while ctr<3 
    a=inputbox("請輸入密碼") 
    if a=pass then 
        msgbox("認證成功") 
        msgbox("(你可以在這裡加一段成功後得到的資訊)") 
        exit do 
    else 
        ctr=ctr+1 '如果密碼出錯就增加一次錯誤認證計數 
        msgbox("認證出錯, 請檢查密碼") 
    end if 
loop 

  這樣實現的功能和上一個例子完全一樣, 我們再來看看把while放在loop後面: 

dim a,ctr 
ctr=0 
const pass="pas123_" 
do 
    a=inputbox("請輸入密碼") 
    if a=pass then 
        msgbox("認證成功") 
        msgbox("(你可以在這裡加一段成功後得到的資訊)") 
        exit do 
    else 
        ctr=ctr+1 '如果密碼出錯就增加一次錯誤認證計數 
        msgbox("認證出錯, 請檢查密碼") 
    end if 
loop while ctr<3 

  功能是一樣的, 為什麼要放在loop後面呢? 你把ctr的值改成3就知道了, while在do後面的程式會直接退出, 而在loop後面 

還會允許一次認證, 到了loop才結束.和while相反的是until, 用法和while一樣, 不過他只有當後面的運算式的值為false(表 

達式不成立)的時候才執行迴圈體, 請自己實驗一下 

  ok, 我們來看另外一種迴圈結構,for....next, 這種迴圈結構是基於計數的, 也是在編程中最常見到的迴圈結構. 

dim i 
for i=0 to 5 
    msgbox(i) 
next 

  看到了嗎?每次輸出的i都是遞增的, 但我們沒有明確指出i要遞增, 當i達到5的時候, 迴圈就結束了, 因為由0開始, 所以 

迴圈體執行了6次, 這一點很重要, 大部分東西都是從0開始而不是1. 這個程式也可以寫成 

do的形式: 

dim i 
i=0 
do while i<5 
    msgbox(i) 
    i=i+1 '因為do不能自動計數, 必須手動加 
loop 

  怎麼樣, 還是for比較好用吧. for在編程中很有用途, 我們再舉一個例子, 順便講一下嵌套迴圈. 

dim i,j 
for i=1 to 9 
    for i=1 to 9 
       str=str & i * j & " " '&是和並字串的符號 
    next '每個next對應一個for 
next 

  看看運行結果, 是否令你會想起小學時代的數學老師(醜陋的嘴臉). 要注意, 這裡有一個"大"的for, 和一個小的for, 當 

小的for執行完一個周期以後, 大的for才執行一次(換句話說, 大的for執行一次, 小的要執行9次), 所以一共執行了九九八十 

一次. 在大的for裡可以不僅僅是一個小的for, 也可以加上另外的語句. 我們來修改一下來源程式: 

dim i,j 
for i=1 to 9 
    for i=1 to 9 
       str=str & i * j & " " 
    next '每個next對應一個for 
    str=str & vbCrlf 'vbCrlf相當於鍵盤上的斷行符號鍵,因為你不能在鍵盤上輸入,所以系統定義了一個預設的常量 
next 

  這次運行完成以後, 輸出結果按照乘數進行了分割, 每小for運行完一次, 就換一行(通過vbcrlf). 

  這次的內容對菜鳥可能比較難懂, 掌握的辦法只有一個:多實踐. 另外, 我在論壇看到很多人還是問:"VBScript要用什麼工 

具編?"我就很氣憤, 我在第一篇裡面已經說明:用記事本編輯原始碼, 然後儲存為以.vbs為副檔名的程式就可以了, 請大家不要 

再問. 另外, 國產的一種垃圾軟體"超級X霸"搶佔了vbs這個副檔名, 請把那個垃圾卸載掉. 

  我們總結一下: 

要點: 

1) do..loop和exit do的用法 

2) while當運算式true的時候執行迴圈體,until反之 

3) for...next是計數迴圈, 每次執行計數器遞加 

4) 嵌套迴圈的作用和寫法 

4.5) &用於連接字串 

5) vbCrLf相當於鍵盤上的斷行符號鍵 


作業: 

1) 在我國的數學經典著作"九章算術"中有這樣一道題:百錢買百雞, 公雞5錢一隻, 母雞3錢一隻, 小雞1錢2隻(這個資料我是參 

考一本編程書的, 但我記得是公3,母1,小1錢3隻? 不管了, 就按照書上得來吧)求得是能有多少種辦法買這些雞. 如果看不懂的 

話我用大白話說說:有人要去買雞, 用100塊錢正好買了100隻雞, 價格如下:公:5$, 母:3$, 小:1$ for 2, 讓你求一共多少種賣 

法(公母小怎麼搭配). 請用迴圈解決這個問題. 

ps:今天要去移民局辦事, 所以文章寫的很倉促. 大部分代碼都沒有實驗, 請大家幫我找錯. 另外, 上次的作業大家在論壇應該 

看到了, 我就不重複答案了, 不知道大家喜歡做這種題, 還是以前那種比較簡單的? 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.