C ++:接受用户输入,直到收到*两个*空行
C++: Accepting user input until *two* blank lines are received
我正在编写与用户输入有关的代码。我想继续接收用户的输入,直到用户输入两个空行(用户为两个空行连续点击 'return' 按钮两次,第三次 'return' 用户输入终止。)
我目前的代码是:
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];
}
我正在使用向量作为缓冲区,将每一行输入推回到向量中,因为我想对用户输入做一些有用的事情。我也在计算连续空白行的数量。
目前,我的代码在用户连续点击 'return' 按钮两次后终止(即用户给我一个空行,当再次按下 'return' 键时程序结束)。我正在研究我的代码,我想如果我有 '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
。
注意:使用调试器应该是一个好习惯,如果你还没有的话。
我正在编写与用户输入有关的代码。我想继续接收用户的输入,直到用户输入两个空行(用户为两个空行连续点击 'return' 按钮两次,第三次 'return' 用户输入终止。)
我目前的代码是:
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];
}
我正在使用向量作为缓冲区,将每一行输入推回到向量中,因为我想对用户输入做一些有用的事情。我也在计算连续空白行的数量。
目前,我的代码在用户连续点击 'return' 按钮两次后终止(即用户给我一个空行,当再次按下 'return' 键时程序结束)。我正在研究我的代码,我想如果我有 '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
。
注意:使用调试器应该是一个好习惯,如果你还没有的话。