有谁知道为什么每次运行了一次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

我想要达到的结果

解决乱码问题

因为在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;
}



您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632