- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我坐下来尝试实现 BrainFuck。 syntax看起来很简单。我无法让愚蠢的事情发挥作用。我已经有一段时间了;我承认我需要 sleep 。也许这就是问题所在。解释器没有输出任何东西。我很确定问题很简单;而且我知道在我更好地掌握了我希望这个程序的发展方向之后,我需要模块化一些函数调用。为什么我没有输出?
main.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <memory.h>
#include "list.h"
node file;
node flow;
node memm;
void init() {
file.val = 1;
file.next = 0;
flow.val = 1;
flow.next = 0;
memm.val = 1;
memm.next = 0;
}
int run = 1;
void quit(int val) {
run = 0;
while (file.next) pop(&file);
while (flow.next) pop(&flow);
while (memm.next) pop(&memm);
}
void doop() {
switch (file.val++) {
case '>':
memm.val++;
break;
case '<':
memm.val--;
break;
case '+':
get(&memm, memm.val)->val++;
break;
case '-':
get(&memm, memm.val)->val--;
break;
case '.':
printf("c", get(&memm, memm.val)->val);
fflush(stdout);
break;
case '[':
if (!get(&memm, memm.val)->val)
while (get(&file, file.val)->val != ']')
file.val++;
else push(&flow, file.val);
case ']':
if (get(&memm, memm.val)->val)
file.val = pop(&flow);
}
}
int main(int argc, char** argv) {
int flen, c, i, f_len;
FILE *fh;
char fh_name[] = "test";
signal(SIGINT, quit);
init();
fh = fopen(fh_name, "r");
while (run && (c = fgetc(fh)) != EOF)
push(&file, c);
fclose(fh);
f_len = length(&file);
while (file.val > 0 && file.val < f_len)
doop();
return (EXIT_SUCCESS);
}
list.h
struct node {
int val;
struct node *next;
};
typedef struct node node;
int length(node *n);
void push(node *n, int i);
int pop(node *n);
node *get(node *n, int i);
list.c
#include <stdlib.h>
#include "list.h"
int length(node *m) {
int len = 0;
while (m->next) {
len++;
m = m->next;
}
return len;
}
void push(node *n, int i) {
node *m = n;
while (m->next)
m = m->next;
m->next = malloc(sizeof(struct node));
m->next->val = i;
m->next->next = 0;
}
int pop(node *n) {
node *m = n;
int i = length(n) - 1;
while (i) {
i--;
m = m->next;
}
i = m->next->val;
free(m->next);
m->next = 0;
return i;
}
node *get(node *n, int i) {
node *m = n;
while (i) {
i--;
if (!m->next)
push(n, 0);
m = m->next;
}
return m;
}
test
是 BrainFuck“hello world”
Hello World program
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]
<.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[
<++++>-]<+.[-]++++++++++.
最佳答案
线
switch (file.val++) {
不可能是对的。目前它只是递增文件链的第一个“val”,例如它下面的“mem.val++”。
我希望您需要去掉该行的++,然后做一些关于递增指向指令的指针而不是指令本身的事情。
你的']'指令是错误的;即使你不打算回去,你也需要做流行音乐。
您的“[”指令部分错误。如果该值从零开始,它当前将跳到第一个“]”,它发现没有匹配的“]”。
关于c - BrainFuck 实现问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907511/
是 Brainfuck如果单元是位,并且 + 和 - 操作只是翻转一点,那么图灵完备?是否有一个简单的证据表明无论单元大小如何,类 Brainfuck 的语言都是图灵完备的,还是我需要考虑一个模拟图灵
作为我的 Brainf*ck 实现的调试器/测试程序,我创建了以下计数循环: +[[>+]+] 对于单字节、环绕单元和 30k 单元,这会创建一个无限计数循环。它将每个单元格设置为 1,然后将每个单元
我想知道是否可以只用代码开头的数字 k 来计算 brainfuck 中 1+2+3+...+k 的总和? 例如是否可以像这样做 1+2+3: +++> (这里的代码创建了一个二和三个相加,创建一个并相
我正在研究一个直接解释 brainfuck 的物理面包板 8 位 CPU。 语言规范表明左括号和右括号都有逻辑: [ => Jump to matching ] If Zero ] => Jump t
我正在尝试在 Brainfuck 中制作一个我认为也称为“Brainflake”的程序,它将添加两个用 ASCII 数字字符输入的单位十进制整数,并在输出中以 ASCII 数字字符显示总和。我将如何着
例如,如果数组像 0 0 0 0 ... 0 0[n]s o m e d a t a 4 9 9 9 9 9 9 8 3 7 ...,如何移动指针通过 n,在指针移动后不改变 s o m e d a
有人把这个发给我,并声称这是 Brainfuck 中的一个 Hello World (我希望如此......) ++++++++++[>+++++++>++++++++++>+++>+++.>+.++
我正在尝试使用 BrainFuck 编写一个程序,该程序可以读取最多为 9 的两个数字,计算它们的总和,然后将结果打印出来,例如3 & 5 给出结果 8 。 我只是想了解 BF 语言,但它看起来比我想
有人可以在程序设计语言Brainf * ck中发布一个代码段,以将两个一位数字相乘吗? 最佳答案 ,>, go to cell #2 [ ->+>+> go to cell #4 [ -
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
你能创建一种像 Brainfuck 这样只有一个符号的编程语言吗? 最佳答案 是的,以前已经做过 - 请参阅 Unary . 基本上这是一种奇怪的 Brainfuck 编码。将每个 BF 命令视为一个
这是我正在使用的代码,它测试“b”的输入,如果有其他输入,应该输出“Y”。 拜托,没有人问我为什么选择使用“Y”作为错误值.. > , ----- ---- ----- ---
我有以下正在通过最小测试套件的 Brainfuck 解释器。除了一个相当大的问题,比如打印斐波那契数列似乎失败了(套件中的最后一个测试)。我解释执行失败的 brainfuck fibonacci 代码
我决定使用 Borland 的 CppBuilder6 用 C++ 编写一个简单的 Brainfuck IDE。我已经为 RichEdit 装上了我的,让它看起来有点像记事本。然后我为输入添加了 TE
我是 C 的新手。目前我正在尝试编写一个 Brainfuck 解释器。到目前为止,我已经尝试过了。 #include #include char *line; int curr_po
我认为我的程序并非在所有情况下都支持嵌套循环。这太荒谬了,但是这个 brainfuck 程序与我的拦截器一起正常工作并打印“Hello World!”到标准输出: ++++++++[>++++[>++
我坐下来尝试实现 BrainFuck。 syntax看起来很简单。我无法让愚蠢的事情发挥作用。我已经有一段时间了;我承认我需要 sleep 。也许这就是问题所在。解释器没有输出任何东西。我很确定问题很
是的,我正在制作 Brainfuck 解释器,但我还需要从其代码创建 AST。可以很容易地在节点中使用原始操作(+ - . , > rightBracketsIds; private rea
我写了一个 brainfuck ide 的 alpha 版本。我写了自己的解释器,虽然我从我的老师那里得到了关于代码循环的大量帮助,因为我很难以“IT 方式”理解它。现在对于我的报告,我需要解释器算法
我正在为该语言编写解释器 Brainfuck 我用的是命令行 java bfinterpreter/BFInterpreter >output.bin bf 程序应该输出 00 到 FF 的十六进制,
我是一名优秀的程序员,十分优秀!