ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 06:24

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
 記事の件名: For~Next命令語のバグ
投稿記事Posted: 2005年7月02日(土) 00:11 
コード:
#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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年7月02日(土) 00:58 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
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)


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Google [Bot] & ゲスト[13人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean