HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0514
ルーイヨッシーIFでの分岐について9解決


ルーイヨッシー

リンク

2006/5/14(Sun) 18:57:12|NO.726

始めまして。ルーイヨッシーと申します。
早速ですが、IF文を使用して、暗号化のテストを行っていたのですが、
IF文に差し掛かると

【#Error 21 in line 25 (cipher.hsp)
-->サポートされない機能を選択しました】

とエラーになってしまいしました。スクリプトは

	25 if moto>999999999 { ;もし、変数motoが999999999より大きければ
26 dialog "容量が許容範囲を超えました。",1,"ERROR!" 27 goto *save ;無かった事にする 28 } 29 else { ;もしも違うならば 30 dialog "文字数OK!このままセーブしますか?",2,"最終確認" 31 bsave "save.dat",moto,2 ;DATファイルにセーブ ;無事セーブ 32 goto *saisyo ;初期画面に戻る 33 }
で、文の最初の数は行番号です。
事前に十桁の数字をinput命令で入力してあり、入力先はmotoです。
ちなみにHSP3(3.0a)です。

よろしくお願いします。



この記事に返信する


Drip

リンク

2006/5/14(Sun) 19:36:25|NO.727

Dripです。

 ルーイヨッシーさん、こんにちは。エラーが発生する原因は、if文の記述ミスです。
HSPでは改行はCでいうセミコロン的な役割を果たします。

if a=0:{ x=3 } else{ x=4 }
という文は、Cでいう

if (a==0){ x=3; }; else{ x=4; }
と同様になり、ifの無いelseとしてエラーしてしまいます。気をつけて下さい。



Irisawa

リンク

2006/5/15(Mon) 00:22:53|NO.729

変数motoが文字列変数になっていませんか?
文字列(「数字」は文字列)と数値を比較すると同様の症状が発生します。


moto = "999999999" if moto > 999999999 { } else { mes moto }

数字を数値で比較する場合は数値型にキャストしてください。


moto = "999999999" if int(moto) > 999999999 { } else { mes moto }

本当は始めから数値型にしておくのが一番いいのですが...。
なお、数値に変換できない文字が含まれている場合はint()の結果は0になるのでご注意
下さい。



ルーイヨッシー

リンク

2006/5/17(Wed) 11:05:40|NO.755

はい、一通りやってみます。
少し時間をください。



ルーイヨッシー

リンク

2006/5/17(Wed) 11:22:07|NO.756

今やってみました!
確かに動くようになりました。
ありがとうございました。でも、

十文字の数字であればセーブ

したいのに、
	if (int (moto)>9999999999)|(int (moto)<0000000000) { ;もし、変数motoが999999999より大きければ
dialog "文字数が十文字ではありません。",1,"ERROR!" goto *save } ;無かった事にする else { ;もしも違うならば dialog "文字数OK!このままセーブしますか?",2,"最終確認" if stat=6 { bsave "save.dat",moto,2 } ;DATファイルにセーブ else { goto *save } goto *saisyo } ;初期画面に戻る

と書くとどうも"0000000000"="0"と認識されてしまうようです。
それに、それでセーブしたDATファイルは、"12"としか記述されていないようで、
どうもおかしいです。

何かいい手立てはないでしょうか?



hiroki

リンク

2006/5/17(Wed) 12:13:22|NO.757


bsave "save.dat",moto,2

は、2バイトだけを保存する形になりますので、
10文字の保存は、


bsave "save.dat",moto,10

だと思います。

他に、数字かつ10文字の判定は、strlenの併用も
お勧めします。



ルーイヨッシー

リンク

2006/5/17(Wed) 13:19:21|NO.759

あ!見直しを忘れてました!
ありがとうございます!



ルーイヨッシー

リンク

2006/5/17(Wed) 13:29:22|NO.760

十文字のセーブは僕の文法間違いでした。すいません。
で、

if (int (moto)>9999999999)|(strlen (moto)=10)
と記述したところ文字数が足りないのにちゃんと動いてくれませんでした。
どこがいけないのでしょうか。



kz3

リンク

2006/5/17(Wed) 15:13:03|NO.762

> と記述したところ文字数が足りないのにちゃんと動いてくれませんでした。

何か文章が変なような...

とりあえず「|」を使っているからどちらかの条件が成立すれば式全体は真になります。



ルーイヨッシー

リンク

2006/5/17(Wed) 16:44:21|NO.764

> 文字数が足りないからエラーメッセージを表示させるはずなのに

と、言いたかったのでした。で、このバグは根本的にあまり暗号化に関係ないと
思ったので、(|じゃなくて&だったし)無視することにしました。お世話様でした。



ONION software Copyright 1997-2023(c) All rights reserved.