c++ - C++:接受用户输入直到收到*两个*空行
问题描述
我正在编写与用户输入有关的代码。我想继续接收用户的输入,直到用户输入两个空行(用户连续两次为两个空行点击“返回”按钮,第三次“返回”用户输入终止。)
我到目前为止的代码是:
int number_of_empty_res = 0;
string data;
vector<string> myvec;
while (getline(cin, data) && !data.empty())
{
if (data == "")
{
number_of_empty_res += 1;
myvec.push_back (data+' ');
}
if (number_of_empty_res == 2)
{
break;
}
else
{
number_of_empty_res = 0;
myvec.push_back (data+' ');
}
}
for (int i = 0; i < myvec.size(); i++)
{
cout << myvec[i];
}
我正在使用向量作为缓冲区,将每一行输入推回向量中,因为我想对用户输入做一些有用的事情。我还在计算连续空白行的数量。
目前,我的代码在用户连续两次点击“返回”按钮后终止(即用户给了我一个空白行,当再次按下“返回”键时程序结束)。我正在研究我的代码,我认为如果我有两个连续空白行的“if”条件,代码会中断,但这不会发生......我尝试增加指定的空白数量,但似乎这实际上对代码没有影响,因为代码如前所述不断终止。我还尝试了“while”循环的条件。我认为也许 '!data.empty()' 可能是我的代码中有问题的部分,但是在删除它后,用户输入似乎永远不会终止。
我感谢任何帮助和想法!谢谢!
解决方案
尝试这个:
int main() {
int number_of_empty_res = 0;
string data;
vector<string> myvec;
while (getline(cin, data))
{
if (data.empty()) {
number_of_empty_res += 1;
if (number_of_empty_res > 2)
{
break;
}
}
else
{
number_of_empty_res = 0;
myvec.push_back(data + ' ');
}
}
for (int i = 0; i < myvec.size(); i++)
{
cout << myvec[i];
}
}
原因: 如果我们查看您的循环内部,我们会看到:
if (data == "")
{
number_of_empty_res += 1;
myvec.push_back (data+' ');
}
if (number_of_empty_res == 2)
{
break;
}
else
{
number_of_empty_res = 0;
myvec.push_back (data+' ');
}
这里的问题是,如果number_of_empty_res
还不是 2,则测试失败,因此我们number_of_empty_res
意外重置。
注意:如果您还没有使用调试器,那么使用调试器应该是一个好习惯。
推荐阅读
- ionic-framework - 离子时间倒计时
- javascript - 在 React 方面需要帮助,从特定的反应页面中删除一个组件,而不是全部
- python - 类型解算器音乐列表中的形状错误?
- docker - 詹金斯管道未找到 Terraform
- python - Python:如何在 Pivotal Cloud Foundry 中访问 cx_Oracle?
- ionic-framework - ion-text-wrap 在 ion-item 和 ion-row 内不起作用
- r - 顶点标签 igraph 包中的意见变化
- java - Camel Content-Type 标头中的引号
- python - ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型列表)
- javascript - 渲染 Firebase 结果时,对象作为 React 子级无效(找到:[object Promise])