VBS For Next循環の落とし穴は分かち合います.
1611 ワード
昨日「QWERTYパスワード:暗号化と解読」を書いた時、26文字の文字列を得るために、For Nextサイクルを書きました.
'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25)
s = s & Chr(i)
Next
WScript.Echo s
実行後に文字列出力がないことが分かりました.おかしいと思いました.簡単に修正しました.
'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25)
WScript.Echo Chr(i)
s = s & Chr(i)
Next
WScript.Echo s
まだ何も出力されていません.For Nextの循環中の語句がまったく実行されていないということを説明しています.何を考えているか分かりません.そこで予言者夕刊を教えてもらいました.彼はすぐに落とし穴のありかを発見しました.
'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25) Step -1
WScript.Echo Chr(i)
s = s & Chr(i)
Next
WScript.Echo s
今回はとうとう輸出ができました.聡明なあなたもきっと落とし穴を見つけました.For Nextループの値を求める順序は左から右に行くのではなく、式(i+25)はi=65の前に値を求めていますが、このときiの値はデフォルトの0ですので、元のサイクルは以下の通りです.
'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To 25
s = s & Chr(i)
Next
WScript.Echo s
もちろん出力はありません.最後にプログラムをこう変更しました.
'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = Asc("A") To Asc("Z")
s = s & Chr(i)
Next
WScript.Echo s
単刀直入で、またFor Next落とし穴に出会うことはできません.