Skip to content

Control>repeatのリピート回数が、ScratchとC++コードで異なる #12

@takebozu

Description

@takebozu

内容

Scratchのrepeat部品について、リピート回数の評価方法がScratchとC++コードで異なるため、期待する実行結果にならないことがあります。

  • Scratch: repeat実行前に一度だけ評価する
  • C++コード: ループ中、毎回評価する

その結果、「条件式で使用した変数をループ内で変更する操作をする」と、ループの実行回数がScrachとC++で異なります。

再現方法

targetStr="aaaaa"とし、ループ内でcurrentStrを"a"から"aaaaa"まで一文字ずつ増やしていき、targetStrとcurrentStrが同じ場合に"Yes"を出力するプログラムをScrachで作ります。具体的には下記のような処理になります。
ループ回数の計算にlength of currentStrを使っている点が今回の問題と関係します。

scratch_prog

実行すると、Scratchでは"Yes"が出力されますが、生成されたCのソースファイルでは"No"が出力されます。

期待する動作

生成されるC++コードにおいても、Scratchと同じ評価方法にする。
具体的には、repeatについては、C++のforループの前にループ回数を決定するようなコードを出力する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions