我想输入五个字符串并将它们推入矢量。 但这对我没有用。 如果我喜欢下面更大的代码,我得到的矢量大小为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正在跳过输入。相反,它是在没有输入的地方添加输入。
答案 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);
以刷新上一个换行符。