我的向量得到一个额外的索引,即使我不希望它

My vector gets an extra index, even though I don't want it to

本文关键字:索引 希望 向量 一个 我的      更新时间:2023-10-16

我想输入五个字符串并将它们推入一个向量。但这对我不起作用。如果我像下面这样使用更大的代码,我得到一个大小为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跳过输入。而是在没有输入的地方添加输入。

如果您在投资名称之间打印一些东西,您会注意到第一个是空的。
这是因为在您读取了大写之后,在它之后的流中仍然有一个换行符,并且您的第一个getline只读取到该换行符。

你可以通过插入 来解决这个问题。
cin.ignore(100, 'n');

在你读到大写字母后立即

(顺便说一句:随着程序的增长,混合瑞典语和英语标识符很快就会令人困惑。)

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

是我编译上面代码时的输出

您可以通过更改

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

cin >> bolag;

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