How do I check for end-of-file using the std::getline
function? If I use eof()
it won't signal eof
until I attempt to read beyond end-of-file.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The canonical reading loop in C++ is:
while (getline(cin, str)) {
}
if (cin.bad()) {
// IO error
} else if (!cin.eof()) {
// format error (not possible with getline but possible with operator>>)
} else {
// format error (not possible with getline but possible with operator>>)
// or end of file (can't make the difference)
}
回答2:
Just read and then check that the read operation succeeded:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Since the failure may be due to a number of causes, you can use the eof
member function to see it what happened was actually EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
returns the stream so you can write more compactly:
if(!std::getline(std::cin, str))