C++ 为什么我的代码在执行时在初始嵌套for循环时进入无限循环? >n>>q; INTA、b、c、标志; a=0; 对于(int i=0;i

C++ 为什么我的代码在执行时在初始嵌套for循环时进入无限循环? >n>>q; INTA、b、c、标志; a=0; 对于(int i=0;i,c++,arrays,string,parsing,C++,Arrays,String,Parsing,守则: struct tag{ char name[100]; char att[100][100]; char val[100][100]; }; int main(){ tag tags[100]; char line[200]; int n,q; cin>>n>>q; int a,b,c,flag; a=0; for(int i=0;i<n;i++){ ci

守则:

struct tag{
    char name[100];
    char att[100][100];
    char val[100][100];
};

int main(){

    tag tags[100];
    char line[200];
    int n,q;
    cin>>n>>q;

    int a,b,c,flag;
    a=0;

    for(int i=0;i<n;i++){
        cin.getline(line,200);

        b=c=flag=0;

        int j;
        if(flag==0){
            for(j=1;line[j]!=' '||line[j]!='>';j++)
               {tags[a].name[j]=line[j];
                cout<<"!";
                }
            flag=1;
        }
        else if(flag==1){
            while(line[j]!='>'){
                for(j+=1,c=0;line[j]!=' '||line[j]!='=';j++,c++){
                    tags[a].att[b][c]=line[j];
                }
                while(line[j]!='"')
                    j++;

                for(j+=1,c=0;line[j]!='\"';j++,c++){
                    tags[a].val[b][c]=line[j];
                }
                b++;
            }
            a++;
        }
    }

    cout<< tags[0].name[0];
    return 0;
}
struct标记{
字符名[100];
char att[100][100];
char val[100][100];
};
int main(){
标签标签[100];
字符行[200];
int n,q;
cin>>n>>q;
INTA、b、c、标志;
a=0;
对于(int i=0;i在这种情况下:

line[j]!=' ' || line[j]!='>'
对于
行[j]
的任何值,析取的条件之一将为真。这将导致无限循环

您正在寻找:

line[j]!=' ' && line[j]!='>'
应该是

for(j=1;line[j]!=' '&& line[j]!='>';j++)

此外,您永远不会进入else部分,因为在迭代开始时,您将设置flag==0,if(flag==0)始终为true

为变量指定有意义的名称。例如,
flag
不会告诉读者该变量的作用。作为猜测(猜测的需要说明了问题),可能是第一次
。但我在函数中设置标志为1,其中我检查标志=0。因此,我想我可以进入else块。您设置标志=1,这是可以的。但在下一次迭代开始时,标志将再次初始化为0(b=c=flag=0;),在检查条件之前。请告诉我您的else块是否正在执行此更改。是的,这是有意的,因为我想在每次迭代开始时运行一次。谢谢您的帮助!
for(j=1;line[j]!=' '&& line[j]!='>';j++)