以下是我的代码http://pastebin.com/itL26LW6 http://pastebin.com/index/fvx3Tc65
特别是这是应该控制[和]
的部分 case Token.LEFT:
if (tape[datapointer] == 0 ){
int i =1;
while (i > 0) {
char c2 = (char) c[++charpointer];
if (c2 == Token.LEFT)
i++;
else if (c2 == Token.RIGHT)
i--;
}
}
break;
case Token.RIGHT:
int i = 1;
while ( i > 0 ) {
char c2 = (char) c[--charpointer];
if (c2 == Token.LEFT)
i--;
else if (c2 == Token.RIGHT)
i++;
}
charpointer--;
break;
}
}
该程序应该在一个名为file.txt的文件中读取brainf * ck程序。问题是,我测试了hello world,我的程序没有做任何事情。我无法弄清楚上面的代码算法的问题。
答案 0 :(得分:0)
一个问题是,在[
令牌之后,您的charpointer
不会增加。
这意味着如果当前datapointer
下的值不为零,则您的程序会卡在[
符号上,因为++charpointer
甚至不执行一次。
如果datapointer
指向零,它会跳转到相应的]
,从而导致无限循环。
此外,在]
令牌后,charpointer
不应递减,否则您的程序会在<{em> {{1}之前跳转到令牌这是错误的。
以下是更正后的代码:
]