Do-while循环从数组跳过第一个字符串

时间:2018-01-22 16:45:55

标签: c++ arrays do-while

因此,我创建了一个程序,允许用户从数组中输入一些字符串值。

所以,这是我的代码:

int i = 0;
string elements[100] = {};
do {
    cout << "Element [" << i << "]: ";
    getline(cin, elements[i]);
    i++;
} while (elements[i - 1] != "_END");

问题是,当我运行程序时,do while会跳过数组的第一个元素。

这是输出:

image

您可以看到elements[0]被跳过。尝试了相同的代码,但用简单的getline替换了cin。有效。但我需要getline

我该怎么办?

1 个答案:

答案 0 :(得分:0)

当您想要将未知数量的元素插入列表时,正确的解决方案是使用像std::vector<T>这样的C ++容器。

尝试在调用getline之前添加cin.ignore()命令。您的代码存在的问题是,第一次调用getline时会立即读取cin流中的内容。

unsigned i = 0;
vector<string> elements;
string newElement;
cin.ignore(); // You need to empty the cin stream first
do {
    cout << "Element [" << i << "]: ";
    getline(cin, newElement); // Reads text from input
    elements.push_back(newElement); // Appends new element to the back of vector
    ++i;
} while (newElement != "End_");

如果您对此代码示例有任何疑问,请随时询问。

编辑:关于编写嵌套while循环以及在此示例代码之前使用getline输入一些命令的最后评论似乎是我上面提到的问题。

Edit2: cin.ignore()实际上应该在循环之前调用一次,以便清除cin中的任何未填充数据,而不是每次循环迭代。提供的示例已经过测试,现在可以使用。