ab.com コミュニティ https://www.activebasic.com/forum/ |
|
For~Next命令語のバグ https://www.activebasic.com/forum/viewtopic.php?t=149 |
ページ 1 / 1 |
作成者: | 高信期 [ 2005年7月02日(土) 00:11 ] |
記事の件名: | For~Next命令語のバグ |
コード: #prompt Dim I As Byte, Value As Long Value = 0 For I = 0 To 255 Value = Value + I Next I Print Str$(Value)上記のようにFor~Next命令語の終値にカウンタ変数の型の最大値を指定すると無限ループに陥ります。 また、終値をカウンタ変数の型の最大値以上にしてもコンパイル出来ますが、 実行すると上記と同様に無限ループになります。 WinXPSP2 AB Ver4.02.01 |
作成者: | 山本 [ 2005年7月02日(土) 00:58 ] |
記事の件名: | |
For文は、To以降に指定した数値とカウンタ値を比較し、カウンタ値のほうが上回っているかどうかを判断しています。よって、高信期さんのコードでは、変数Iが256以上になることが、For文を抜け出すための条件となります。しかし、変数IはByte型であるため、256が0になってしまう、即ち、オーバーフローを起こしてしまうことがそもそもの原因です。 これらの問題を、コンパイラが自動解釈してFor文を正常に終了させるのは、至難の業であり、あまり推奨できる仕様ではありません。 「For文のTo以降の数値 + 1」というのが、カウンタ値の変動範囲ですので、それを考慮した上で、型の指定を行ってください。 どうしても、Byte型変数を0~255までカウントさせながらループを行いたい場合は、下のように、Do~Loopを用いたコードに置き換えてください。 コード: #N88BASIC Dim I As Byte, Value As Long Value = 0 Do Value = Value + I I=I+1 Loop While I<255 Print Str$(Value) |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |