我的 Brainf*** 解释器不适用于通用的 Hello World 程序

My Brainf*** interpreter Does Not Work With Common Hellow World Program

我正在尝试用 C++ 制作一个 brainf*** 解释器。当我使用 Esolang hello world 示例对其进行测试时:

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. 

在这里:https://esolangs.org/wiki/Brainfuck

无论出于何种原因,它都不打印任何内容。期间运算符有效,我单独测试过,但适用于正确的 brainf*** 解释器的程序不适用于我的。有人能在这里找到问题吗?

PS: file_str::read(file); 是我实施的一种有效的自定义方法。只是想让你知道。

到目前为止,这是我的代码。

    // Read File
    std::string file_data;
    file_data = file_str::read(file);

    // Array
    int array[30000];

    bool running = true;

    // pos
    int pos = 0;
    int pos_in_stack = 0;

    // Handle brackets
    std::vector<int> brackets;


    // Main Loop
    while(running)
    {

        if(pos > file_data.size()-1)
        {
            break;
        }

        // check what the curren command is and execute
        if(file_data.at(pos) == '>')
        {
            pos_in_stack++;
            pos++;
            continue;
        }

        if(file_data.at(pos) == '<')
        {
            pos_in_stack--;
            pos++;
            continue;
        }

        if(file_data.at(pos) == '+')
        {
            array[pos_in_stack]++;
            pos++;
            continue;
        }

        if(file_data.at(pos) == '-')
        {
            array[pos_in_stack]--;
            pos++;
            continue;
        }

        if(file_data.at(pos) == '.')
        {
            char a = array[pos_in_stack];
            std::cout << a;
            pos++;
            continue;
        }

        if(file_data.at(pos) == ',')
        {
            std::string a;
            std::cin >> a;
            char b = a.at(0);
            array[pos_in_stack] = b;
            pos++;
            continue;
        }

        if(file_data.at(pos) == '[')
        {
            if(array[pos_in_stack] != 0)
            {
                brackets.push_back(pos);
                pos++;
                continue;
            }


            // find coresponding bracket
            else{
                int brackets_looking_for = 1;
                while (brackets_looking_for != 0)
                {
                    pos++;


                    if(file_data.at(pos) == '[')
                    {
                        brackets_looking_for++;
                    }

                    if(file_data.at(pos) == ']')
                    {
                        brackets_looking_for--;
                    }

               }
               continue;
           }
        } 

        if(file_data.at(pos) == ']')
        {
            if(array[pos_in_stack] != 0)
            {
                pos = brackets.at(brackets.size()-1);
                continue;
            }


            brackets.pop_back();
            pos++;
            continue;
        } 

    }

    return 0;

}

感谢大家的帮助,但我找到了解决方案。

我需要改变这个:

pos = brackets.at(brackets.size()-1);

对此:

pos = brackets.at(brackets.size()-1)+1;