因此,我创建了一个程序,允许用户从数组中输入一些字符串值。
所以,这是我的代码:
int i = 0;
string elements[100] = {};
do {
cout << "Element [" << i << "]: ";
getline(cin, elements[i]);
i++;
} while (elements[i - 1] != "_END");
问题是,当我运行程序时,do while
会跳过数组的第一个元素。
这是输出:
您可以看到elements[0]
被跳过。尝试了相同的代码,但用简单的getline
替换了cin
。有效。但我需要getline
。
我该怎么办?
答案 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
中的任何未填充数据,而不是每次循环迭代。提供的示例已经过测试,现在可以使用。