-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
内容
Scratchのrepeat部品について、リピート回数の評価方法がScratchとC++コードで異なるため、期待する実行結果にならないことがあります。
- Scratch: repeat実行前に一度だけ評価する
- C++コード: ループ中、毎回評価する
その結果、「条件式で使用した変数をループ内で変更する操作をする」と、ループの実行回数がScrachとC++で異なります。
再現方法
targetStr="aaaaa"とし、ループ内でcurrentStrを"a"から"aaaaa"まで一文字ずつ増やしていき、targetStrとcurrentStrが同じ場合に"Yes"を出力するプログラムをScrachで作ります。具体的には下記のような処理になります。
ループ回数の計算にlength of currentStrを使っている点が今回の問題と関係します。
- 上記のScrachファイル(.sb3): ScracherTest.sb3.txt
- 生成されるC++コード: prog.cpp.txt
実行すると、Scratchでは"Yes"が出力されますが、生成されたCのソースファイルでは"No"が出力されます。
期待する動作
生成されるC++コードにおいても、Scratchと同じ評価方法にする。
具体的には、repeatについては、C++のforループの前にループ回数を決定するようなコードを出力する。
Metadata
Metadata
Assignees
Labels
No labels