我的向量得到一个额外的索引,即使我不希望它
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(),它返回的值为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);
以刷新最后一个换行符。
相关文章:
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 将转换字符键入 int 以用作向量C++的索引
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 如何为圆环创建索引
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 查找字符在两个索引之间出现的次数
- Azure Kinect 使用正文索引映射裁剪正文
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 我的向量得到一个额外的索引,即使我不希望它