C++ 向量字符串数组输入大小问题 #包括 #包括 使用名称空间std; int main(){ 整数; cin>>数量; 字符串s1; 向量表; 对于(int i=0;i

C++ 向量字符串数组输入大小问题 #包括 #包括 使用名称空间std; int main(){ 整数; cin>>数量; 字符串s1; 向量表; 对于(int i=0;i,c++,arrays,string,vector,C++,Arrays,String,Vector,在第cin>>行之后;在输入缓冲区中仍然有换行符\n(因为您按enter键输入值),要解决此问题,请添加一行cin.ignore(); intmain(){ 整数; cin>>数量; cin.ignore();//添加此行 字符串s1; 向量表; 对于(int i=0;i您正在混合基于行的输入(getline)和基于非行的输入(cin>>number)。这会导致您的第一个getline调用将空的字符串读入s1,因为流中的\n尚未被使用 因此,列表的末尾实际上有5个元素,只是您的输出让人很难注意到

在第
cin>>行之后;
在输入缓冲区中仍然有换行符
\n
(因为您按enter键输入值),要解决此问题,请添加一行
cin.ignore();

intmain(){
整数;
cin>>数量;
cin.ignore();//添加此行
字符串s1;
向量表;

对于(int i=0;i您正在混合基于行的输入(
getline
)和基于非行的输入(
cin>>number
)。这会导致您的第一个
getline
调用将空的字符串读入
s1
,因为流中的
\n
尚未被使用

因此,
列表
的末尾实际上有5个元素,只是您的输出让人很难注意到

为了防止出现问题,请将所有内容转换为基于行的输入。替换此项:

为此:

int number;
cin>>number;
无论如何,这是一个更好的解决方案,因为它可以更容易地检测错误的输入(当用户为
number
输入整数以外的内容时)

int main(){
    int number;
    cin>>number;
    cin.ignore();  // add this line
    string s1;
    vector<string> lists;
    for(int i=0;i<number;i++){
        getline(cin,s1);
        lists.push_back(s1);
    }
    for(int i=0;i<number;i++)
        cout<<lists[i]<<" ";    
}
int number;
cin>>number;
std::string line;
std::getline(std::cin, line);
auto const number = std::stoi(line);