"while(getline(cin, name))"如何控制未知行数的查询?
How does "while(getline(cin, name))" controls an unknown number of lines of queries?
在 HackerRank 的一个问题中,有一个条件需要未知数量的查询行。问题的link是:
我无法解决每个测试用例的问题,但我查看了解决方案,发现人们正在使用 while(getline(cin, name)) 来控制 未知数量的查询行 如下所示:
string name;
while(getline(cin, name))
{
std::map<string, string>::iterator it;
it = phoneList.find(name);
if (it == phoneList.end()){
cout << "Not found" << endl;
} else {
cout << name << "=" << it->second << endl;
}
}
现在,我不明白 未知数量的查询行 是如何由 while(getline(cin, name))[=27= 控制的].
std::cin
是一个输入流。
std::getline
从 std::cin
读取一行并将其写入 name
。如果没有错误,它 returns 相当于 true
,否则 false
。
while
循环因此读取行直到它失败或中断。
您可以使用 std::cin.setstate(std::ios_base::failbit);
强制失败,或者 break
退出 for 循环。
在 HackerRank 的一个问题中,有一个条件需要未知数量的查询行。问题的link是:
我无法解决每个测试用例的问题,但我查看了解决方案,发现人们正在使用 while(getline(cin, name)) 来控制 未知数量的查询行 如下所示:
string name;
while(getline(cin, name))
{
std::map<string, string>::iterator it;
it = phoneList.find(name);
if (it == phoneList.end()){
cout << "Not found" << endl;
} else {
cout << name << "=" << it->second << endl;
}
}
现在,我不明白 未知数量的查询行 是如何由 while(getline(cin, name))[=27= 控制的].
std::cin
是一个输入流。
std::getline
从 std::cin
读取一行并将其写入 name
。如果没有错误,它 returns 相当于 true
,否则 false
。
while
循环因此读取行直到它失败或中断。
您可以使用 std::cin.setstate(std::ios_base::failbit);
强制失败,或者 break
退出 for 循环。