向量字符串数组输入大小问题

时间:2018-10-20 08:43:59

标签: c++ arrays string vector

#include<vector>
#include<iostream>
using namespace std;

int main(){
    int number;
    cin>>number;
    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]<<" ";    
}

当我输入5(例如)作为输入number时,我只能输入4个字符串而不是5个字符串。

谢谢。

2 个答案:

答案 0 :(得分:1)

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

所以lists实际上 末尾有5个元素,只是您的输出使您难以察觉。

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

int number;
cin>>number;

与此:

std::string line;
std::getline(std::cin, line);
auto const number = std::stoi(line);

无论如何,这是一个出色的解决方案,因为它可以更容易检测到错误的输入(当用户输入number的整数以外的内容时)。

答案 1 :(得分:0)

在行cin>>number;之后,在输入缓冲区中仍然存在换行符\n(因为您按Enter键输入了值),要解决此问题,您可以在行cin.ignore();处添加一行

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]<<" ";    
}