我的矢量获得了额外的索引,即使我不想要它

时间:2015-08-28 07:49:14

标签: c++ c++11 stdvector

我想输入五个字符串并将它们推入矢量。 但这对我没有用。 如果我喜欢下面更大的代码,我得到的矢量大小为5,只能输入4个字符串。 但是,如果我改变它,所以它说

for(int n=0; n<=5; n++)

这导致我能够输入5个字符串,但如果我调用investments.size()它返回值6.如果我打印每个元素,它将首先打印一个空字符串,然后打印5我已经进入了。

所以看来,当我的循环结束时,我得到一个额外的输入并将其推入向量。 是因为getline()行吗?当我的循环结束时,这会运行并在我的向量中输入一个空字符串吗?

int main(){
    using namespace std;
    vector<string> investments;
    vector<double> andel;
    double procent;
    int kapital;

    cout << "Hur stort kapital ska investeras?" << endl;
    cin >> kapital;
    cout << investments.size() << endl;
    cout << "Skriv in dina fonder som du ska spara i. En i taget." << endl;
    for(int n=0; n<5; n++){
        string bolag;
        getline(cin, bolag);
        investments.push_back(bolag);
    }
    cout << "size of investments: " << investments.size() << endl;
    for(string s : investments) cout << s << endl;

}

问题不在于cin正在跳过输入。相反,它是在没有输入的地方添加输入。

3 个答案:

答案 0 :(得分:1)

for(int n=0; n<=5; n++)

你的第一个for循环将推送6个字符串[0; 5](包含边框)

但它对我来说会很好。

Hur stort kapital ska investeras?
0
Skriv in dina fonder som du ska spara i. En i taget.
size of investments: 5

是输出,当我compile上面的代码时。

答案 1 :(得分:1)

如果您在投资名称之间打印某些内容,您会注意到第一个名称是空的 这是因为在您阅读完首都之后,流后面仍然会有换行符,而您的第一个getline只读取该换行符。

您可以通过插入

来解决此问题
cin.ignore(100, '\n');
在您阅读完资本之后立即

(顺便说一下:随着程序的增长,混合瑞典语和英语标识符会很快混淆。)

答案 2 :(得分:0)

您可以通过更改

来解决此问题
getline(cin, bolag);

cin >> bolag;

或者,在您第一次使用getline(cin, bolag);之前,您可以拨打cin.ignore(1);以刷新上一个换行符。