Inkey$を使ったプログラム

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
いとちゃん

Inkey$を使ったプログラム

#1 投稿記事 by いとちゃん »

画面に欲しいタイトルを表示して、カーソルの上下で選択し
+キーで1個づつ増やしていって
エンターを押したらその注文表を出力しようと考えました。

プログラムのエラーはよくわかって直すのですが
アクセス違反と出ます。

これについてご教示いただけるような方がいらしゃいましたらぜひ
お教えください。

草々

コード: 全て選択


#N88BASIC

Dim dat[ELM(24)] as String
Dim han[ELM(24)] as Long
Dim t as Long

Dim lp as Long

dat[ 1]=" 1. 欲しいもののタイトル                       "
dat[ 2]=" 2. 欲しいもののタイトル 						"
dat[ 3]=" 3. 欲しいもののタイトル 						"
dat[ 4]=" 4. 欲しいもののタイトル 						"
dat[ 5]=" 7. 欲しいもののタイトル 						"
dat[ 6]=" 8. 欲しいもののタイトル 						"
dat[ 7]=" 9. 欲しいもののタイトル 						"
dat[ 8]="11. 欲しいもののタイトル 						"
dat[ 9]="12. 欲しいもののタイトル 						"
dat[10]="13. 欲しいもののタイトル 						"
dat[11]="14. 欲しいもののタイトル 						"
dat[12]="16. 欲しいもののタイトル 						"
dat[13]="17. 欲しいもののタイトル 						"
dat[14]="19. 欲しいもののタイトル 						"
dat[15]="20. 欲しいもののタイトル 						"
dat[16]="21. 欲しいもののタイトル 						"
dat[17]="22. 欲しいもののタイトル 						"
dat[18]="24. 欲しいもののタイトル 						"
dat[19]="26. 欲しいもののタイトル 						"
dat[20]="30. 欲しいもののタイトル 						"
dat[21]="33. 欲しいもののタイトル 						"
dat[22]="35. 欲しいもののタイトル 						"
dat[23]="37. 欲しいもののタイトル 						"
dat[24]="38. 欲しいもののタイトル 						"

	Color 7,0
	for lp=1 to 24
		Locate 5,lp:	Print dat[lp]
	Next
'-------------------------------------------------------------------------------------------------
Dim temp As String
Dim y As Long
Dim cs As Long
'-------------------------------------------------------------------------------------------------
cs=1
'-------------------------------------------------------------------------------------------------
	for lp=1 to 24
	Color 7,0
	If lp=cs then Color 7,1
	Locate 5,lp:	Print dat[lp],han[lp];"冊"
	Next
'-------------------------------------------------------------------------------------------------	
80     temp=Inkey$()
   if Asc(temp)=0 then 80

   if Asc(temp)=38 then cs=cs-1            
            If cs=0 then cs=24
			Color 7,1:Locate 5,lp:	Print dat[lp],han[lp];"冊"
   if Asc(temp)=40 then cs=cs+1
            If cs=25 then cs=1
			Color 7,1:Locate 5,lp:	Print dat[lp],han[lp];"冊"
   if Asc(temp)=13 then goto 100
   if Asc(temp)=107 then han[cs]=han[cs]+1
			Color 7,1:Locate 5,cs:	Print dat[cs],han[cs];"冊"
'-------------------------------------------------------------------------------------------------
for lp=1 to 24
	Color 7,0
	If lp=cs then Color 7,1
	Locate 5,lp:	Print dat[lp],han[lp];"冊"
	Next

goto 80
'-------------------------------------------------------------------------------------------------

100

Color 7,0
for lp=1 to 24
Locate 5,lp:	Print dat[lp],han[lp];"冊"
Next
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

確保していない領域に対して読み書きしているためだと思います。
Dim A[ELM(10)] As Long
と宣言すると、
A配列の0~9までが使用可能になることになります。
つまり、A[10]は使用されることを想定していません。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
いとちゃん

ありがとうございます。でも。。。

#3 投稿記事 by いとちゃん »

配列数を増やしてみましたが同じエラーがでます。
おかしいですね。

意味不明で、エラーが出てしまうとその先、STOPしてしまいます。
ひたすら眺めていますが、なかなか見つかりません。
いとちゃん

修正できましたが。。。。

#4 投稿記事 by いとちゃん »

おそれいります。

プログラムの大半は修正できましたが、結果をプリントしようとしておりまして

AB262のときはプリント関数があったのに
AB413では、プリントができなくなってしまいました。

LPRINTのようなことはできないのでしょうか?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#5 投稿記事 by konisi »

僕が書いた物ではありませんが、
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=159
等が参考になるかと思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する