LWDbiancheng002b 2022-02-03 17:50 采纳率: 100%
浏览 14
已结题

有谁知道为什么每次运行了一次BF代码之后在运行得出的结果就是乱码了?

问题遇到的现象和发生背景

最近制作了一个BF的编译器,但每次打完第一行代码后再打第二行就是乱码了,给各位看一下代码

问题相关代码,请勿粘贴截图
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <windows.h>
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 100001
#define eps 1e-9
typedef long long ll;
using namespace std;
const int inf=0x7fffffff;
string s;
vector<char> a;
int kiss;
int i;
void dealk()
{
    void deal(char c);
    int start=i;
    while(1)
    {
        i++;
        if(s[i]==']')
        {
            if(a[kiss]==0)
            {
                break;
            }
            else
            {
                i=start;
                continue;
            }
        }
        deal(s[i]);
    }
}
void deal(char c)
{
    if(c=='+')
        a[kiss]++;
    if(c=='-')
        a[kiss]--;
    if(c=='>')
    {
        kiss++;
        if(kiss>=a.size())
            a.push_back(0);
    }
    if(c=='<')
    {
        kiss--;
        if(kiss<0)
        {
            a.insert(a.begin(),i);
            kiss=0;
        }
    }
    if(c=='.')
    {
        int m=a[kiss];
        printf("%c",m);
    }

    if(c==',')
    {
        char k;
        scanf("%c",&k);
        s[kiss]=k;
    }
    if(c=='[')
    {
        dealk();
    }
}

int main()
{
    SetConsoleTitle("Brain_NTF v3.1.2"); 
    cout<<"Brain_NTF version:3.1.2\n";
    cout<<"                            \n";
    cout<<"------------information------------\n";
    cout<<"Product version:22013022A\n";
    system("echo %random% OEM %random%%random%");
    system("color 0A");
    cout<<"-------------code area--------------\n";
    while(cin>>s)
    {
        a.push_back(0);
        int kiss=0;
        for(i=0;i<s.size();i++)
        {
            deal(s[i]);
        }
    }
    return 0;
}


运行结果及报错内容

img

我想要达到的结果

解决乱码问题

  • 写回答

2条回答 默认 最新

  • 关注

    因为在main函数中,每次while循环的时候,你没有把a清空,kiss应该用全局变量,而不是从新申请一个变量。

    img

    代码修改如下:

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <windows.h>
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 100001
    #define eps 1e-9
    typedef long long ll;
    using namespace std;
    const int inf=0x7fffffff;
    string s;
    vector<char> a;
    int kiss;
    int i;
    void dealk()
    {
        void deal(char c);
        int start=i;
        while(1)
        {
            i++;
            if(s[i]==']')
            {
                if(a[kiss]==0)
                {
                    break;
                }
                else
                {
                    i=start;
                    continue;
                }
            }
            deal(s[i]);
        }
    }
    void deal(char c)
    {
        if(c=='+')
            a[kiss]++;
        if(c=='-')
            a[kiss]--;
        if(c=='>')
        {
            kiss++;
            if(kiss>=a.size())
                a.push_back(0);
        }
        if(c=='<')
        {
            kiss--;
            if(kiss<0)
            {
                a.insert(a.begin(),i);
                kiss=0;
            }
        }
        if(c=='.')
        {
            int m=a[kiss];
            printf("%c",m);
        }
    
        if(c==',')
        {
            char k;
            scanf("%c",&k);
            s[kiss]=k;
        }
        if(c=='[')
        {
            dealk();
        }
    }
    
    int main()
    {
        SetConsoleTitle("Brain_NTF v3.1.2"); 
        cout<<"Brain_NTF version:3.1.2\n";
        cout<<"                            \n";
        cout<<"------------information------------\n";
        cout<<"Product version:22013022A\n";
        system("echo %random% OEM %random%%random%");
        system("color 0A");
        cout<<"-------------code area--------------\n";
        while(cin>>s)
        {
            a.clear(); //修改1,添加这一句,每次开始时都清空vector
            a.push_back(0);
            kiss=0; //修改2,使用全局变量kiss
            for(i=0;i<s.size();i++)
            {
                deal(s[i]);
            }
        }
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 创建了问题 2月3日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效