我正在编写一个程序,使用getline
接受用户输入(我必须使用getline
)并将其吐回屏幕。它也应该再次询问输入是否为空白。我在处理具有多个换行符和标签的输入时遇到了问题。
我已经接受了它的工作,但它已经循环了几次,我无法弄清楚如何解决它/做得更好。这是代码:
string name;
while(true)
{
cout << "What is your name?" << endl;
getline(cin, name, '\n');
if (!name.empty())
{
break;
}
}
cout << "Hello " << name << "!" << endl;
return 0;
这是输入:
\n
\n
John\n
Doe\n
我想要的输出应该是这样的:
What is your name?
Hello John Doe!
我的输出如下:
What is your name?
What is your name?
What is your name?
Hello John!
答案 0 :(得分:1)
我可能无法理解您的要求,但如果您只想在不同的行中收集用户的名字和姓氏(同时忽略任何标签),您可以这样做。
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string first;
std::string last;
std::cout << "What is your name?\n";
while (first.empty())
{
std::getline(std::cin, first);
// remove all tabs from input
first.erase(std::remove(first.begin(), first.end(), '\t'), first.end());
}
while (last.empty())
{
std::getline(std::cin, last);
// remove all tabs from input
last.erase(std::remove(last.begin(), last.end(), '\t'), last.end());
}
std::string name = first + " " + last;
std::cout << "Hello, " << name << "!\n";
return 0;
}
您的用户将被允许点击返回/输入和标签,直到他们神志不清。在std::getline()
获得一些非标签输入之前,无论发生多少新行或标签都无关紧要。根据你的问题,这似乎是你想要的。您可以使用std::remove
here找到有关我用于删除标签的STL算法的更多信息。