【问题标题】:My vector gets an extra index, even though I don't want it to我的向量得到一个额外的索引,即使我不希望它
【发布时间】: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 获取输入大写的那一行剩余的任何内容,您首先需要完成该行。
  • cin and getline skipping input 的可能重复项
  • 如果你知道你需要多少个字符串,请提前预留位置并使用索引访问元素。
  • @Atomic_alarm 是的,如果我提前知道我需要多少个元素,数组会更好。你是对的。但我正在使用矢量来为不同的用户扩展和添加 x 数量的元素:)
  • @Svalorzen 问题不在于它正在跳过输入。相反,它是在没有输入的地方添加和推送输入。

标签: c++ c++11 stdvector


【解决方案1】:

如果您在投资名称之间打印一些内容,您会注意到第一个是空的。
这是因为在您读取大写字母之后,流中仍有一个换行符,而您的第一个 getline 只能读取到该换行符。

你可以通过插入来解决这个问题

cin.ignore(100, '\n');

在您阅读大写字母后立即。

(顺便说一句:随着程序的发展,混合瑞典语和英语标识符会很快变得混乱。)

【讨论】:

  • 非常感谢!那解决了它:)我知道它会让人困惑,我应该做得更好。谢谢你也告诉我!
【解决方案2】:

for(int n=0; n&lt;=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你的代码时。

【讨论】:

  • 这很奇怪。因为如果我输入像你一样的东西。这就是我得到的:Hur stort kapital ska investeras? 0 Skriv in dina fonder som du ska spara i. En i taget. 1 2 3 4 size of investments: 5 1 2 3 4
【解决方案3】:

您可以通过更改来解决此问题

getline(cin, bolag);

cin >> bolag;

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

【讨论】:

  • 但是如果有些字符串是多个单词,cin不会只抢第一个吗?我应该在哪里打电话给cin.ignore(1)
猜你喜欢
  • 2011-04-03
  • 2020-12-19
  • 2016-07-30
  • 2016-08-11
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多