在Brainfuck中制作if(x == y)语句

smi*_*545 6 if-statement esoteric-languages brainfuck

所以我正在研究一个读取文件然后再将其输出的程序,但是我无法让程序在文件末尾停止输入.我希望它停在特定的字符,如'0'或'$'或任何真正的因为一个字符NULL无法读入我的brainf解释器.这是迄今为止的代码:

>+[>,][<.]
Run Code Online (Sandbox Code Playgroud)

问题始于此,[>,]因为输入永远不会为NULL,此循环永远不会结束.

那么如何插入if语句,如果它到达预先指定的结束字符,它将终止此循环?

McL*_*vin 5

以下代码等同于您的代码,除非它在输入值为1(ASCII中不可打印)时停止.循环之间的<是因为最后一个值为0.

>+[+>,-]<[<.]
Run Code Online (Sandbox Code Playgroud)

它在输入后递减值,检查它是否为0,如果不是则循环回来.如果它循环回来,它必须再次递增指针以撤消减量.示例数组可能是:

00  02  H  e  l  l  o  _  W  o  r  l  d  00
                                          ^
Run Code Online (Sandbox Code Playgroud)

但是,[<.]打印字符串的反面(后面是不可打印的1).可以通过将指针移动到开头并从那里向前移动来打印字符串本身,如以下代码所示:

>+[+>,-]<[<]>>[.>]
Run Code Online (Sandbox Code Playgroud)

在此代码中,[<]当它到达索引0时停止,>>移动到索引2(字符串开始),并[.>]输出字符,直到它到达结尾处的0.

如果要使用不同的ASCII字符,例如space(32),请在第一个循环内多次重复+和 - .(警告:如果输入中的任何字符小于32,则此代码将导致值低于0).

>+[++++++++++++++++++++++++++++++++>,--------------------------------]<[<]>>[.>]
Run Code Online (Sandbox Code Playgroud)