【发布时间】:2015-08-28 16:09:28
【问题描述】:
我想输入五个字符串并将它们推入一个向量。 但这对我不起作用。 如果我像下面更大的代码那样做,我会得到一个 5 的向量大小并且只能输入 4 个字符串。 但是如果我改变它,它会说
for(int n=0; n<=5; n++)
这导致我能够输入 5 个字符串,但如果我调用 Investment.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 获取输入大写的那一行剩余的任何内容,您首先需要完成该行。
-
如果你知道你需要多少个字符串,请提前预留位置并使用索引访问元素。
-
@Atomic_alarm 是的,如果我提前知道我需要多少个元素,数组会更好。你是对的。但我正在使用矢量来为不同的用户扩展和添加 x 数量的元素:)
-
@Svalorzen 问题不在于它正在跳过输入。相反,它是在没有输入的地方添加和推送输入。