当前位置: 首页 > 知识库问答 >
问题:

实施问题:

娄丁雨
2023-03-14

我坐下来试着实施脑力操。语法似乎很简单。我很难让这个愚蠢的东西发挥作用。我做这件事已经有一段时间了;我承认我需要一些睡眠。也许这就是问题所在。翻译没有输出任何东西。我很确定问题很简单;我知道,在我更好地掌握了这个程序的发展方向之后,我需要对一些函数调用进行模块化。为什么我没有得到输出?

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);
}

列表。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);

列表。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是大脑操的“你好世界”

Hello World program
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]
<.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[
<++++>-]<+.[-]++++++++++.

共有2个答案

岳劲
2023-03-14

这是因为你需要睡觉,也因为你的代码很乱,我发现了这个

printf("c", get(&memm, memm.val)->val);

它将打印一个c,仅此而已

printf("%c", get(&memm, memm.val)->val);
/*      ^ it's the format specifier for the argument */

我怎么这么快就找到了?

  • 非常简单,我启用了编译器警告

顺便说一句:get(

荀裕
2023-03-14

排队

switch (file.val++) {

不可能是对的。目前它只是增加文件链的第一个“val”,就像它下面的“mem.val”。

我希望您需要去掉这一行上的,然后做一些事情,增加指向指令的指针,而不是指令本身。

你的指令是错误的;即使你不打算回去,你也需要做流行音乐。

您的“[”指令部分错误。如果该值从零开始,它当前将跳到第一个“]”,它将发现不匹配的“]”。

 类似资料:
  • 问题内容: 我正在开发使用caliburn.micro进行前端和使用Asp.net WebApi 2进行后端的客户端/服务器数据驱动的应用程序。 该应用程序包含一个名为“ Person”的类。使用简单的REST协议,“个人”对象被序列化(JSON),并从客户端到服务器来回移动。该解决方案工作正常,没有任何问题。 问题: 为了实现NotifyOfPropertyChanged(),我为“人”设置了父

  • 问题内容: 我尝试实现冒泡排序,但是不确定它是否正确。如果您可以看一下它,并且它是气泡式的,并且可以通过更好的方式完成,请不要害羞。这是代码: 问题答案: 这是冒泡排序的正常实现,似乎还可以。可以进行几种优化,但是总体思路是相同的。这里有一些想法: 如果在内循环中未执行任何交换时,外循环有一个迭代,则中断,无用继续 在外循环的每次迭代中,交换内循环的方向-从左至右执行一次,然后从右至左执行一次(这

  • 问题内容: 海 我想建立一个包含聊天的网站。我正在使用PHP,我想要一个代码来实现与php的聊天。有人可以帮助我做到这一点吗?我知道阿贾克斯。我不懂其他语言… 问题答案: 我们目前正在与LiveZilla合作,这非常好,这是公司唯一必须拥有Windows PC的东西。操作员界面位于“ .NET”上 livezilla

  • 有人能解释一下为什么我的启动/停止按钮不起作用吗?这不是一个完整的秒表,但我被困在这里。感谢您的帮助!这是我第一次在论坛上发帖,所以如果我的帖子有任何问题,请告诉我。这是我的代码:

  • Storm 使用 CGroup 来限制 worker 的资源使用, 以保证公平和 QOS. 请注意:CGroups 目前仅支持 Linux 平台(内核版本 2.6.24 及更高版本) 设置 要使用 CGroups, 请确保正确安装 cgroups 并配置 cgroup.有关设置和配置的更多信息, 请访问: https://access.redhat.com/documentation/en-US/

  • 问题内容: 我的快速搜索显示了参考实现(http://stax.codehaus.org),Woodstox实现(http://woodstox.codehaus.org)和Sun的SJSXP实现(https://sjsxp.dev.java.net / )。 请评论它们的相对优点,并让我介绍我应考虑的任何其他实现。 问题答案: 伍德斯托克斯为我赢得了每一次胜利。这不仅是性能,而且-sjsxp抽搐