checking for eof in string::getline

前端 未结 2 1295
陌清茗
陌清茗 2020-11-29 23:43

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

相关标签:
2条回答
  • 2020-11-30 00:17

    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))
    
    0 讨论(0)
  • 2020-11-30 00:18

    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)
    }
    
    0 讨论(0)
提交回复
热议问题