我的矢量获得了一个额外的索引,即使我不希望它这样做
My vector gets an extra index, even though I don't want it to
我想输入五个字符串并将它们压入一个向量中。
但这对我不起作用。
如果我像下面更大的代码那样做,我得到一个大小为 5 的向量并且只能输入 4 个字符串。
但如果我改变它,它会说
for(int n=0; n<=5; n++)
这导致我能够输入 5 个字符串,但是如果我调用 investments.size() 它 returns 值为 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 正在跳过输入。而是在有 none.
的地方添加输入
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你上面的代码。
您可以通过更改
来解决此问题
getline(cin, bolag);
到
cin >> bolag;
或者,在您第一次使用 getline(cin, bolag);
之前,您可以调用 cin.ignore(1);
以刷新最后一个换行符。
如果您在投资名称之间打印一些内容,您会注意到第一个是空的。
这是因为在你读完大写之后,在它后面的流中还有一个换行符,你的第一个 getline
只读到那个换行符。
您可以通过插入
来解决这个问题
cin.ignore(100, '\n');
读完首都后立即。
(顺便说一句:随着程序的增长,混合使用瑞典语和英语标识符会很快造成混淆。)
我想输入五个字符串并将它们压入一个向量中。 但这对我不起作用。 如果我像下面更大的代码那样做,我得到一个大小为 5 的向量并且只能输入 4 个字符串。 但如果我改变它,它会说
for(int n=0; n<=5; n++)
这导致我能够输入 5 个字符串,但是如果我调用 investments.size() 它 returns 值为 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 正在跳过输入。而是在有 none.
的地方添加输入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你上面的代码。
您可以通过更改
来解决此问题getline(cin, bolag);
到
cin >> bolag;
或者,在您第一次使用 getline(cin, bolag);
之前,您可以调用 cin.ignore(1);
以刷新最后一个换行符。
如果您在投资名称之间打印一些内容,您会注意到第一个是空的。
这是因为在你读完大写之后,在它后面的流中还有一个换行符,你的第一个 getline
只读到那个换行符。
您可以通过插入
来解决这个问题cin.ignore(100, '\n');
读完首都后立即。
(顺便说一句:随着程序的增长,混合使用瑞典语和英语标识符会很快造成混淆。)