C++ 程序在c+中的for循环后结束+; 为什么这个程序只运行到第一个for循环,然后停止?

C++ 程序在c+中的for循环后结束+; 为什么这个程序只运行到第一个for循环,然后停止?,c++,arrays,string,for-loop,C++,Arrays,String,For Loop,它不运行第二个for循环,也跳过系统(“暂停”)。有人能解释一下我的代码中的错误吗? 我想创建两个字符串数组:长度为a和b的strgs1和strgs2,然后从用户处获取数组中每个元素的输入。 这是我的代码: #include <cstdio> #include <iostream> #include <string> using namespace std; int main(){ int a,b; cin>>a>>b

它不运行第二个for循环,也跳过系统(“暂停”)。有人能解释一下我的代码中的错误吗? 我想创建两个字符串数组:长度为a和b的strgs1和strgs2,然后从用户处获取数组中每个元素的输入。 这是我的代码:

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    string strgs1[a-1], strgs2[b-1];
    
    for(int i = 0;i < a;i++){
        cin>>strgs1[i];
    }        
    for(int j = 0;j < b;j++){
        cin>>strgs2[j];
    }
    system("pause");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
INTA,b;
cin>>a>>b;
字符串strgs1[a-1],strgs2[b-1];
for(int i=0;i>strgs1[i];
}        
对于(int j=0;j>strgs2[j];
}
系统(“暂停”);
返回0;
}

第一点,您使用的是静态数组
字符串strgs1[a-1],strgs2[b-1]。那是个坏主意。我建议改用std::vector


第二点,用于阵列的大小不好。例如,第一个数组的大小为
a-1
,您尝试在其中插入
a
字符串(从0到a-1)。

假设输入a=3。数组的大小为a-1=2。循环迭代i=0、i=1、i=2。但这是3个元素,而你的向量只有2个大小


此外,使用std::vector。C++编译器允许使用非恒定大小的数组,但它不是可移植的。

代码>字符串STRGS1[A-1 ] <代码>,更不用说VLAs是非标准C++,您的循环试图访问的最后一个索引是“代码> A-1<代码”,这超出了数组的范围。通过访问超出范围的索引
strgs1[a-1]
具有编号为
0
a-2
a-1
元素。循环试图访问索引
a-1
处的元素-没有这样的元素。@AlgirdasPreidžius为什么strgs[a-1]超出范围??for loops条件是i