c++关于goto的玄学错误

如题

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin>>s;
    if(s=="SHELVE")
        goto to_1;
    string qwq,now;
    getline(cin,qwq);
    int l=qwq.find('"'),r=qwq.find_last_of('"');
    to_1:;
}

此段代码运行时goto会报错,为什么呢?

C++中对跳转语句跳过临时变量有一些限制,改这样就可以了,供参考:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    int l,r;
    string qwq,now;
    cin>>s;
    if(s=="SHELVE")
        goto to_1;
    //string qwq,now;
    getline(cin,qwq);
    l=qwq.find('"'),r=qwq.find_last_of('"');
    to_1:;
}

#include
#include
修改一下头文件。

修改如下:

#include<iostream>
#include <string>
using namespace std;
int main(){
    string s;
    string qwq,now;
    cin>>s;
    if(s=="SHELVE")
        goto to_1;
    
    getline(cin,qwq);
    int l=qwq.find('"'),r=qwq.find_last_of('"');
to_1:;
    return 0;
}